2016-07-08 68 views
1

我知道已經有1000個線程處理這個問題,但我已經嘗試了一切,到目前爲止沒有任何工作。我正在製作一個小應用程序,讓我可以記錄工作時間,因此我有一個包含所有工作時間的字符串數組。我正在嘗試更新數組,然後更新包含文本的JList,然後更新包含該列表的JScrollPane。通過這種方式,我可以在將窗口添加到窗口後直接添加小時。更新JScrollPane的問題

我試過revalidate()repaint()在每個對象上,我試過列表上的removeAll()方法以及滾動窗格,似乎沒有任何工作!我能做的唯一事情就是改變scrollpane邊框的顏色!我不知道爲什麼佈局很容易更新,但不是窗格上的文本!

感謝您的幫助!如果你想查看代碼,我可以發佈它,但這有點令人困惑,因爲這只是整個系統的一小部分。

+4

閱讀JList的API,在那裏你會發現鏈接'如何使用Lists'包含一個工作示例。 – camickr

+2

*「我已經嘗試了一切,目前爲止沒有任何工作」*鑑於(至少)一件事情應該起作用,您沒有嘗試過「一切」似乎是合乎邏輯的。順便說一句 - 更新列表時,不要觸摸列表***或***滾動窗格,只需更改「ListModel」。其他一切都會自動更新。 –

+1

謝謝@AndrewThompson,我想出瞭如何使用DefaultListModel及其工作! –

回答

0

我嘗試着從中解脫出來。

當您嘗試在Jlist中添加時間字符串,然後想要更新您的Jscroll窗格。

我將通過簡單的

只需創建喜歡你的設計觀點:

Jpanel1(card layout) 

| 
----> Jscrollpane1 

      | 
      ------>Jpanel2 

        | 
        --------> Your Jlist will be here on dynamic runtime 

,你可以管理面板代替的jList。

但在這裏我用列表

public void getUpdateOldWorkTimeList() 
{ 
    List<String> workTimeList; 
SwingWorker<Void, Void> mySwingWorker = new SwingWorker<Void, Void>()   { 

     @Override 
     protected Void doInBackground() throws Exception { 

      workTimeList=getMyTimeList(); // here you put your work time array 

      Thread.sleep(100); 
      return null; 
     } 
    }; 


    mySwingWorker.addPropertyChangeListener(new PropertyChangeListener() { 
     @Override 
     public void propertyChange(PropertyChangeEvent evt) { 
      if (evt.getPropertyName().equals("state")) { 
       if (evt.getNewValue() == SwingWorker.StateValue.DONE) { 

       jPanel2.removeAll(); 
       jPanel2.revalidate(); 
       jPanel2.repaint(); 

       for (int i = 0; i < workTimeList.size(); i++) { 
        jPanel2.add(new ModelJList()).setVisible(true); 
        }     
      } 
     } 
    });    

    jPanel3.setLayout(new model.WrapLayout(FlowLayout.CENTER, 1, 0)); 
    jPanel1.setBackground(new Color(0, 0, 0, 0)); 
    jScrollPane1.setBackground(new Color(0, 0, 0, 0)); 
    i 

    jScrollPane1.getVerticalScrollBar().setUnitIncrement(16); 
    int remainScroll=jScrollPane1.getVerticalScrollBar().getMaximum()- jScrollPane1.getVerticalScrollBar().getModel().getExtent(); 
     jScrollPane1.getVerticalScrollBar().setValue(remainScroll); 
     jPanel1.removeAll(); 
     jPanel1.add(jScrollPane1); 

     jPanel1.revalidate(); 
     jPanel1.repaint(); 

}去

兩件事必須提醒:

  1. 列表模型類:你需要實現。(當你看起來你覺得你想要的)。

  2. getMyTimeList()方法來數組列表轉換。

我已經實現了它爲聊天應用程序添加發送方和接收方的聊天。

所有最優秀的