2011-03-30 105 views
1

我創建了一個包含各種Jtextfields以顯示數據的表單。數據來自互聯網來源,並且頻繁更改(每隔幾秒)。我不確定這樣做的最佳方式。在表單上顯示動態數據

到目前爲止,我有一個類根據請求檢索數據並在本地存儲數據。然後可以使用getters和一個計時器來檢索數據。

例如。

class Grabber(){ 
     static String data; 

     static void update(String source){ 
       //update data from source 
     } 

     static String getData(){ 
      return data; 
     } 
    } 

然後在窗體文件,MyForm.java我:

Timer timer = new Timer(2000, performUpdate); 
    timer.start(); 

    .... 

    ActionListener performUpdate = new ActionListener(){ 
      public void actionPerformed(ActionEvent evt){ 
       Grabber.update(); 
       jTextField1.setText(Grabber.getData()); 
      } 
    }; 

我相信這會工作,但我不知道這是爲了做到這一點,我最好的方式只是想要檢查我沒有做一些愚蠢的事情。我想過在Grabber函數裏面有個計時器,然後調用MyForm裏面的一個函數,我認爲這會更好,但是它增加了對GUI的依賴性,這看起來不太合適。

另一個問題是,我打算有幾個來源。以我建議的方式執行更新會需要串行互聯網請求,這可能會更好地並行執行?我希望數據儘可能最新。

道歉,如果這不是一個典型的問題,但我只是尋找其他想法如何實現這一點。

回答

1

更新您的模型在一個單獨的線程中,以適合源的任何速率,可能使用SwingWorker作爲此example中的建議。只有在數據實際發生變化時纔將這些結果發佈到感興趣的視圖。

+0

看看這個例子,看起來線程可以訪問表單變量,因爲它是一個子類?你會建議有一個單一的線程遍歷所有的來源,或每個來源的線程。 – Roger 2011-03-30 19:24:15

+0

我猜這取決於源代碼,但任何可能阻塞時間超過可接受延遲的應該可能都是單獨的工作人員。 – trashgod 2011-03-30 21:49:30

+0

我想我會去那麼一個。非常感謝您的幫助。 – Roger 2011-03-30 21:53:31