无法通过其他方法 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 名称应以大写字母开头。了解这一点并遵循这一点将使我们能够更好地理解您的代码,并使您能够更好地理解其他人的代码。
我对修改按钮背景有疑问。我正在使用 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 名称应以大写字母开头。了解这一点并遵循这一点将使我们能够更好地理解您的代码,并使您能够更好地理解其他人的代码。