簡體   English   中英

JLabel不會改變顏色

[英]JLabel doesn't change back color

我的部分功能看起來像這樣

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秒,但在此期間標簽不會改變顏色和捕獲)。 我在繪畫中犯了錯誤?

  • 使您的JLabel不透明,以便您可以設置其背景顏色。
  • 在單獨的線程中執行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調用)

JLabels默認是不透明的,因此默認情況下不會繪制它們的背景。 試試:

jLabel2.setOpaque(true);

或者你可能需要在改變顏色后調用重繪:

jLabel2.repaint();

我懷疑你的restartSSH()方法阻塞了事件派發線程 一種方法是使用SwingWorker ,如本例所示 這將允許您顯示重新啟動過程的進度並在完成后適當地設置標簽。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM