我有一个扩展JPanel的类“GUI”。我有另一个扩展JFrame的类“按钮”。我正在尝试让JFrame类在JPanel类中调用一个方法“clearScreen()”,当在JFrame上按下JButton“clearB”时。 我可以完成这项工作的唯一方法是在JButton的actionlistener中为JPanel类“GUI”构建对象:
clearB.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent event){
GUI g = new GUI();
g.clearScreen();
}
}
);
但是当我调用clearScreen()方法时,它看起来像这样:
public void clearScreen(){
xs.clear();
ys.clear();
count = 0;
repaint();
}
没发生任何事。我猜这是因为repaint()方法由于我不知道的某些原因而无法正常工作。 有人请告诉我一个更容易,更有效的方法来做我想在这里完成的事情。 谢谢! :d
答案 0 :(得分:2)
您的ActionListener无法正常工作的原因是您在其中创建的GUI对象有一个 new GUI对象,该对象与显示的GUI对象完全无关,因此在非显示的GUI实例上调用clearScreen()
方法对显示的GUI实例没有影响。
解决方案是让您的Buttons类将有效引用保存到可视化GUI对象并调用此引用上的方法。引用可以通过setter方法或构造函数参数传递。
即,
public class Buttons {
private GUI gui;
public Buttons (GUI gui) {
this.gui = gui;
}
// in some ActionListener code...
gui.someMethod();
}
几条评论: