Dam*_*mir 4 java swing background boolean jlabel
我的部分功能看起来像这样
jLabel2.setBackground(Color.YELLOW);
jLabel2.setText("Status : Idle");
boolean ok=cpu21.RestartSSH();
if(ok){
jLabel2.setBackground(Color.GREEN);
jLabel2.setText("Status : Run");
}
Run Code Online (Sandbox Code Playgroud)
在我输入功能标签之前是绿色和运行,但是当我进入功能时它不会将颜色变为黄色(功能RestartSSH正在执行5-6秒,但在此期间标签不会改变颜色和捕获).我在绘画中犯了错误?
dog*_*ane 14
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();
Run Code Online (Sandbox Code Playgroud)
(更新:已添加电话SwingUtilities.invokeLater)
JLabels默认是不透明的,因此默认情况下不会绘制它们的背景.试试:
jLabel2.setOpaque(true);
Run Code Online (Sandbox Code Playgroud)
或者你可能需要在改变颜色后调用重绘:
jLabel2.repaint();
Run Code Online (Sandbox Code Playgroud)