gpt4 book ai didi

java - ActionListener 不绘图,也不调用函数

转载 作者:行者123 更新时间:2023-12-01 09:36:25 26 4
gpt4 key购买 nike

public void actionPerformed(ActionEvent e) 内部代码中的 ActionListener 不会响应用于绘制线条的函数和代码。为什么我不能在 ActionListener 内画线?为什么我不能调用画线的函数。

MainClass.java

import javax.swing.SwingUtilities;

public final class MainClass {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new CreateFrame();
System.out.println("GUI created Successfully");
}
});
}
}

//CreateFrame.java
import javax.swing.JFrame;

public class CreateFrame {
CreateFrame(){
createFrame();
}
public void createFrame(){
JFrame frame = new JFrame("Drawing Lines");
frame.setSize(400, 300);
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//calling a class and adding in the frame
frame.add(new CreateDrawings());
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}

//CreateDrawings.java
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JPanel;

public class CreateDrawings extends JPanel {
private static final long serialVersionUID = 1L;
JButton drawButton;
JPanel panel;

CreateDrawings() {
setLayout(null);
drawButton = new JButton("Draw");
drawButton.setBounds(150, 220, 120, 30);
}

@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
add(drawButton);
g.setColor(Color.blue);
g.drawLine(10, 50, 200, 50);
drawButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
g.setColor(Color.red); //NOT WORKING
g.drawLine(10, 100, 200, 100); //NOT WORKING
drawSomething(g); //NOT WORKING
JOptionPane.showMessageDialog(null, "This is called though!");
}
});
}// PaintComponent

private void drawSomething(Graphics g) {
super.paintComponent(g);
g.setColor(Color.black);
g.drawLine(10, 150, 200, 150);
}
}

最佳答案

因为g是一个非final变量,所以你不能像上面那样在匿名内部类中访问它。我还没有找到任何官方答案。不过,你可以引用another question在 StackOverflow.com 上

我猜您使用的是 Java 之前 8,因此您的源代码无法工作。如果你尝试使用 Java 8,它会起作用。原因是 Java 8 引入了关于有效最终的新概念。请参阅定义here .

因此,如果您切换到 Java 8,g 就是一个有效的最终变量。因此,您的源代码将能够编译。

关于java - ActionListener 不绘图,也不调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38865424/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com