作为初学者,我正在制作一个系统信息项目。该项目有一个GUI时钟和另一个GUI报告:CPU,内存使用等。作为一项功能,我希望用户能够一次更改所有这些JFrame的不透明度。
程序组织在打开程序时,会弹出一个主菜单,然后用户可以打开时钟或CPU监视器。在主菜单上有一个组合框,其内容为:100%,90%,最低可达10%。我在组合框中添加了一个动作事件,然后将主菜单的不透明度设置为组合框的相应输出。
问题出在哪里。上述段落仅在时钟GUI未打开时才有效。如果我尝试更改主菜单和GUI时钟的不透明度,时钟会冻结,并且不透明度在任何GUI上都不会改变。
public void opacityComboBoxActionPerformed(java.awt.event.ActionEvent evt) {
int x = opacityComboBox.getSelectedIndex();
switch(x) {
case 0:
break;
case 1:
opacity=10; // in the combo box the value shows 100%
break;
case 2:
opacity=9;
break;
case 3:
opacity=8;
break;
case 4:
opacity=7;
break;
case 5:
opacity=6;
break;
case 6:
opacity=5;
break;
case 7:
opacity=4;
break;
case 8:
opacity=3;
break;
case 9:
opacity=2;
break;
case 10:
opacity=1; // in the combo box the value shows 10%
break;
default:
opacity=10;
break;
}
setOpacity();
GuiClock guic = new GuiClock(); // being the class with the other GUI JFrame
guic.setOpacity();
}
public void setOpacity() {
Main m = new Main();
float fOpacity = (float)m.opacity/10;
String sOpacity = Float.toString(fOpacity)+"f";
this.setOpacity(Float.parseFloat(sOpacity));
}
GUI时钟在线程上更新,上面的空隙是否会干扰线程?如果是这样,我应该制作另一个不断检查不透明度变化的线程,或者这只是通过额外的CPU来咀嚼。
我该怎么做,以便在组合框输入的所有GUI上不透明度发生变化?
注意:如果有更有效的方法来优化我的代码,或完全更改它,请告诉我。我只是想了解更多:)......
答案 0 :(得分:2)
首先来看看这个主题:The Use of Multiple JFrames, Good/Bad Practice?。您应该只有一个JFrame并使用非模态JDialog代替。请查看How to Use Modality in Dialogs文章。
关于ActionListener实施,您可以通过以下方式高度简化代码:
@Override
public void actionPerformed(ActionEvent e) {
JComboBox comboBox = (JComboBox)e.getSource();
Integer selectedValue = (Integer)comboBox.getSelectedValue();
Float opacity = Float.valueOf((float)(selectedValue / 100)); // if 10 then 0.1, 20 then 0.2, and so on
// set the opacity to the frame and dialogs
}
最后,通过这样做:
public void opacityComboBoxActionPerformed(java.awt.event.ActionEvent evt) {
...
GuiClock guic = new GuiClock(); // being the class with the other GUI JFrame
guic.setOpacity();
}
您不会更改所显示窗口的不透明度,而是创建一个新窗口。您需要保持对显示的GuiClock
对象的引用,并更改此对象的不透明度。
这里也是如此:
public void setOpacity() {
Main m = new Main();
...
}
要获得更好的帮助,请发布Minimal, Complete, Tested and Readable example。