我有一个学校的高潮项目,其中必须包含我本学期所学的尽可能多的内容,其中两个是方法和gui。在我要制作的程序中,在父类和子类中都存在一个ButtonListener,但是在上一行的父类中有一个错误:nameConfirm.addActionListener(new ButtonListener())
,这表明ButtonListener无法解析为一个类型。我知道这与层次结构有关,但是我不知道应该如何解决。
我有一个模糊的想法,就是有些人使用“ this”或“ override”,但我并不真正理解它们的工作原理。
这是父类:
public void startGame() {
JPanel namePanel = new JPanel();
JButton nameConfirm = new JButton("ask");
nameConfirm.addActionListener(new ButtonListener());
namePanel.add(nameConfirm);
setContentPane(namePanel);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(800, 175);
setResizable(false);
setLocationRelativeTo(null);
class ButtonListener implements ActionListener {
}
}
这是子类:
public cpt2() {
JPanel startingPanel = new JPanel();
JPanel buttonPanel = new JPanel();
newGame = new JButton("New Game");
newGame.addActionListener(new ButtonListener());
buttonPanel.add(newGame);
checkStats = new JButton("Statistics");
checkStats.addActionListener(new ButtonListener());
buttonPanel.add(checkStats);
exit = new JButton("Exit");
exit.addActionListener(new ButtonListener());
buttonPanel.add(exit);
startingPanel.add(buttonPanel);
setContentPane(startingPanel);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(1110, 375);
setResizable(false);
setLocationRelativeTo(null);
public class ButtonListener extends JFrame implements ActionListener{
public void actionPerformed(ActionEvent a) {
if (a.getSource() == newGame){
cptRun.startGame();
}
else if (a.getSource() == checkStats){
}
else if (a.getSource() == exit){
System.exit(0);
}
}
}
}
我希望摆脱该错误,并在父类和子类中为不同的JPanel提供工作按钮。
答案 0 :(得分:0)
这是父类
这是一种方法,并且您已在方法中内联class
。
更常见的方法是
nameConfirm.addActionListener(new ActionListener() {
// Implement ActionListener methods here, within anonymous class
});
或将匿名类移至变量
final ActionListener buttonListener = new ActionListener() {
// Implement ActionListener methods here, within anonymous class
};
nameConfirm.addActionListener(buttonListener);
这是子类
目前尚不清楚这是哪个班级。您有一个构造函数cpt2
和public class ButtonListener extends JFrame implements ActionListener
例如,我想您想要的是
public class Cpt2Frame extends JFrame implements ActionListener {
public Cpt2Frame() {
// some button
someButton.addActionListener(Cpt2Frame.this); // 'this' class 'is-a' ActionListener
}
// Implement ActionListener methods within defined class
}
或者您可以创建一个单独的文件 ButtonListener.java
,该文件不应是JFrame,而应是侦听器接口
public class ButtonListener implements ActionListener {
}
然后,您可以进行addActionListener(new ButtonListener())