java - 无法通过其他方法更改/修改按钮背景 - JAVA

标签 java user-interface button netbeans windowlistener

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

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

我可以做什么来解决这个问题?

最佳答案

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

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

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

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

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

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

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

关于java - 无法通过其他方法更改/修改按钮背景 - JAVA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39933266/

相关文章:

java - 当 super 用户时 System.getenv() 返回 null

java - 如何阻止 IntelliJ IDEA 在启用 "External Libraries"的情况下扩展 "Autoscroll from Source"?

php - 为每个用户在按钮点击时传递 ID

java - 显示具有两个面板的 GUI,每个面板包含三个按钮

java - 了解 Java 中的 volatile 和非 volatile 读/写

java - 将java随机数生成偏向某个数字

ruby-on-rails - 是否有可用于 Ruby on Rails 中的 PostgreSQL 数据库的首选 GUI 或可视化界面?

linux - 从用户空间的程序调用内核模块函数

user-interface - 不同的 GUI 工具包和语言绑定(bind)之间有什么区别?

javascript - 如何在 javascript 的禁用按钮上启用工具提示?