2016-03-05 53 views
0

當我在我的程序中執行以下方法時,一些組件會在定時器耗盡時發生變化。例如,我創建了一個jTextArea,但沒有任何包含構造的事件來改變其大小。如果我首先展開jTextArea然後啓動計時器,則無關緊要,反之亦然。Java定時器未知事件

//Show Debug Information for given Seconds with given Text 
void giveUserInformation(String input, boolean function, int duration) { 
    //Debug information and label visibility handling 
    jLabelDebug.setVisible(true); 
    jLabelDebug.setText(input); 

    //Image 
    if (function) 
     jLabelDebug.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/images/ok-icon.png"))); 
    else 
     jLabelDebug.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/images/Actions-edit-delete-icon.png"))); 

    //Show duration 
    if (timerShowDurationRuns) { 
     timerShowDuration.cancel(); 
     timerShowDuration = new Timer(); 
    } 

    timerShowDurationRuns = true; 
    //fadeIn(); 
    timerShowDuration.schedule(new TimerTask() { 
     @Override 
     public void run() { 
      jLabelDebug.setVisible(false); 
      timerShowDurationRuns = false; 
      //fadeOut(); 
     } 
    }, duration * 1000); 
    setCursor(Cursor.getDefaultCursor()); 
} 
+0

您正在將標籤設置爲不可見 - 即改變指令的指令 - 加上jtextArea在哪裏? – gpasch

+0

假設您使用佈局管理器,當您更改組件的可見狀態時,需要計算佈局以補償該組件的丟失(因爲不可見組件會佔用空間) – MadProgrammer

回答

1

當您創建的JTextArea你應該使用這樣的代碼:

JTextArea textArea = new JTextArea(5, 30); 

現在文本區域將能夠確定它的首選大小,當你添加文本,使其保持固定。

然後,當你把它添加到你的GUI使用像代碼:

frame.add(new JScrollPane(textArea)); 

現在,當您添加更多的數據文本區域大小將保持不變,但滾動條在需要時會出現。