无法从其他方法更改/修改按钮背景 - JAVA

时间:2016-10-08 13:57:56

标签: java user-interface button netbeans windowlistener

我有关于修改按钮背景的问题。我正在使用netbeans gui builder来构建表单。我正在尝试在第二帧打开时更改按钮背景,并在第二帧关闭时将其转回。

public void update(boolean x){
    if(x==true){
        circleButton.setOpaque(true);
        circleButton.setBackground(new java.awt.Color(0, 0, 0));

        System.out.println("testoutput");
    }
}

这是我从头等课程的更新方法。

我在第二帧添加了窗口监听器。

private void formWindowOpened(java.awt.event.WindowEvent evt) {                                  
    isitopen = true;
    //this is first class which includes button
    homework hwork = new homework();

    hwork.update(isitopen);

    System.out.println("testoutput2");
}

我有2次测试输出,但按钮的颜色没有变化。

我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:1)

您在formWindowOpened(...)方法中创建了一个新的家庭作业对象,一个与显示的家庭作业完全无关,并且更改新对象的状态对所显示的对象没有影响。

简单且 错误 解决方案是使用静态字段或方法。

相反,一个简单的解决方案是给你的formWindowOpened(...)方法提供一个有效参考给显示的家庭作业对象,可以使用构造函数参数或{{1 }} 方法。

更好,更简单的解决方案:

  • 使第二个窗口成为模态JDialog,而不是JFrame
  • 通过这种方式,家庭作业将知道窗户何时打开并可以设置自己的按钮颜色。当第二个窗口打开时,调用类中的程序流被搁置,只有在第二个窗口关闭时才会恢复 - 就像使用JOptionPane一样。

有关详情,请参阅The Use of Multiple JFrames, Good/Bad Practice?

另外,您需要学习并使用Java naming conventions。变量名都应以较低的字母开头,而类名以大写字母开头。了解并遵循这一点将使我们能够更好地理解您的代码,并使您能够更好地理解其他代码。