我在使用 ActionListener 为不同类中的单选按钮更改我的一个类中的 Jpanel (mainPanel) 颜色时遇到问题。我将 mainPanel 的默认颜色设置为黑色。
基本上我的第一堂课有一个 setMainPanel 方法:
public class MainBoard extends JFrame{
public void setMainPanel(Color c){
mainPanel.setBackground(c);
}
}
在我的第二堂课中,我的动作侦听器为:
private class MenuHandler implements ActionListener{
public void actionPerformed(ActionEvent e){
if(e.getSource() == exit) {
System.exit(0);
}else if(e.getSource() == blueBackground) {
MainBoard mb = new MainBoard();
mb.setMainPanel(Color.BLUE);
}
}
}
如果我单击菜单中的“退出”,我的 System.exit 命令将起作用。我试图实现的概念是拥有一个带有单选按钮的“更改颜色”菜单,用户可以在其中更改为黑色或蓝色。我知道这可能有点矫枉过正,但我们正在尝试学习如何对来自不同类的组件进行更改。感谢您的任何帮助!
不好:
MainBoard mb = new MainBoard(); // this is not the currently displayed MainBoard
mb.setMainPanel(Color.BLUE);
这代表了一个常见的 Java 新手的神奇思维错误,你认为改变一个类的对象的状态会神奇地改变同一个类的不同对象的状态,但这不是 Java 的工作方式。您需要setMainPanel(...)
在对当前显示或活动的 MainBoard 实例的引用上调用该方法,而不是在此方法中创建的一些随机的、完全不同的、从未显示的 MainBoard 对象。
因此,将适当的引用传递给侦听器,可能使用以下内容:
private class MenuHandler implements ActionListener {
MainBoard mainBoard;
MenuHandler(MainBoard mainBoard) {
this.mainBoard = mainBoard;
}
public void actionPerformed(ActionEvent e){
if(e.getSource() == exit) {
System.exit(0);
}else if(e.getSource() == blueBackground) {
// MainBoard mb = new MainBoard();
mainBoard.setMainPanel(Color.BLUE);
}
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句