我的部分功能看起来像这样
jLabel2.setBackground(Color.YELLOW);
jLabel2.setText("Status : Idle");
boolean ok=cpu21.RestartSSH();
if(ok){
jLabel2.setBackground(Color.GREEN);
jLabel2.setText("Status : Run");
}
在我输入功能标签之前是绿色和运行,但是当我进入功能时它不会将颜色变为黄色(功能RestartSSH正在执行5-6秒,但在此期间标签不会改变颜色和捕获)。我在绘画中犯了错误?
答案 0 :(得分:13)
RestartSSH
,否则您的GUI将不会响应事件。示例:
final JLabel jLabel2 = new JLabel("HELLO");
jLabel2.setOpaque(true);
jLabel2.setBackground(Color.YELLOW);
jLabel2.setText("Status : Idle");
//perform SSH in a separate thread
Thread sshThread = new Thread(){
public void run(){
boolean ok=cpu21.RestartSSH();
if(ok){
//update the GUI in the event dispatch thread
SwingUtilities.invokeLater(new Runnable() {
public void run() {
jLabel2.setBackground(Color.GREEN);
jLabel2.setText("Status : Run");
}
});
}
}
};
sshThread.start();
(更新:添加了对SwingUtilities.invokeLater
的调用)
答案 1 :(得分:5)
默认情况下,JLabels是不透明的,因此默认情况下不会绘制它们的背景。试试:
jLabel2.setOpaque(true);
或者您可能需要在更改颜色后调用重绘:
jLabel2.repaint();
答案 2 :(得分:2)
我怀疑您的restartSSH()
方法阻止了event dispatch thread。一种方法是使用SwingWorker
,如example中所述。这将允许您显示重新启动过程的进度并在完成后适当地设置标签。