无法通过其他方法 change/modify 按钮背景 - JAVA

Can't change/modify button background from another method - JAVA

我对修改按钮背景有疑问。我正在使用 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");
    }
}

这是我第一个 class 的更新方法。

我向第二帧添加了 window 侦听器。

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 个测试输出,但按钮的颜色没有改变。

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

您正在 formWindowOpened(...) 方法中创建一个新的作业对象,一个与显示的作业对象完全无关的对象,更改新对象的状态不会影响显示的对象。

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

相反,一个简单的解决方案是使用 formWindowOpened(...) 方法为 calss 提供对显示的作业对象的 有效引用 ,这可以通过构造函数参数完成或 setHomework(...) 方法。

更好更简单的解决方案:

  • 使第二个 window 成为模态 JDialog,而不是 JFrame
  • 这样作业就会知道window什么时候打开,可以设置自己的按钮颜色。当第二个 window 打开时,调用 class 中的程序流被搁置,只有当第二个 window 关闭时才恢复——就像使用 JOptionPane 一样。

有关此的更多信息,请参阅 The Use of Multiple JFrames, Good/Bad Practice?

顺便说一句,您会想要学习和使用 Java naming conventions。变量名称应全部以小写字母开头,而 class 名称应以大写字母开头。了解这一点并遵循这一点将使我们能够更好地理解您的代码,并使您能够更好地理解其他人的代码。