我无法在网上找到答案,所以我来到这里。如果我的代码中的错误非常明显,我会提前道歉;我对java swing还是一个新手。这里发生了什么:我创建了一个名为toggleElevators
的JButton,我希望它在点击时更改文本。我已经创建了一个ActionListener并将其添加到toggleElevators
。我现在想要的是让JButton在点击Click me
到Clicked
时更改文字。
首先,这里是JFrame执行时的样子:
注意:有第三类,但是纯粹用于在左侧绘制图片。它与GridLayout或JButton无关。
Run
类(创建框架并添加toggleElevators
JButton:
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.GridLayout;
import javax.swing.JFrame;
public class Run extends Input{
Input i = new Input();
public static void main(String[] args) {
new Run();
}
public Run() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame("Elevators");
frame.setLayout(new GridLayout(0, 3));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new Elevators(Color.MAGENTA, true));
frame.add(new Elevators(Color.ORANGE, false));
frame.setSize(800,600);
frame.setResizable(false);
frame.getContentPane().add(toggleElevators); //adds toggleElevators button to JFrame
i.addButtonListeners(); //calls method defined in Input class, which adds the ActionListener to the toggleElevators button
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
}
Input
class(创建toggleElevators
JButton及其ActionListener):
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
public class Input {
JButton toggleElevators = new JButton("Click me.");
public void addButtonListeners() {
toggleElevators.addActionListener(new toggleElevatorsListener());
}
class toggleElevatorsListener implements ActionListener {
public void actionPerformed (ActionEvent event) {
toggleElevators.setText("Clicked.");
System.out.println("ActionListener called."); //I know the ActionListener is not being called because this line is not being printed out in the console
}
}
}
答案 0 :(得分:1)
您的Run类扩展了Input,但也有一个名为i
的输入。您正在向框架中添加this.toggleElevators
,但您正在向i.toggleElevators
添加监听器。
从班级中删除i
字段。我也完全忘记了定义和扩展Input类。它没有任何目的,似乎比帮助你更加困惑。
答案 1 :(得分:0)
您在Input
课程中创建了新的Run
,而Run
课程也扩展了Input
。
当您致电i.addButtonListeners();
时,toggleElevators
上的i
添加了动作听众,而不是toggleElevators
类继承的Input
。< / p>
尝试addButtonListeners()
。
答案 2 :(得分:0)
您的Run
课程延长了Input
。因此它有自己的toggleElevators
,它是在框架中设置的i
。但是,toggleElevators
具有自己的i
,用于设置事件侦听器。所以他们没有设置在框架中的那个,而是放在一个永远不会被使用的框架上。
您只需删除Run
对象即可。当Input
扩展toggleElevators
时,它可以直接调用该方法,然后将侦听器添加到自己的{{1}}。