2012-02-08 31 views
0

我迷路了:我有的JFrame,在的JFrameJTabbedPane中JTabbedPane中是4個JPanels(標籤)。每個的JPanel(製表符)是JScrollPane的的JTable(共:4 JTable中的)。每個JTable我在啓動應用程序時使用來自數據庫的數據 - 完美無缺。JTable中查看事件

現在我想此刻每個JTable中填充數據,當我點擊JTabbedPane中(標籤)。我試圖:"public class MyTest1Tab extends JPanel implements FocusListener""this.addFocusListener(this);"在構造函數中,我已經實現了focusGained(FocusEvent e) and focusLost(FocusEvent e)方法。但我覺得,這個解決方案是不正確的。

從我的角度來看,我需要像監聽點擊選項卡上JTabbedPane的或當顯示的JTable這是燒製的一些事件。

是否有人知道我怎麼可以監聽特定JTable中顯示?

+0

你要找的選項卡式窗格 – xyz 2012-02-08 09:15:40

+0

由於上一個ChangeListener,做此偵聽一些例子。有小問題:它應該返回標籤名稱或索引。標籤名稱不好(應用程序是多語言的)。當我將依賴標籤索引時,它可以改變嗎? - 例如,當我將按鈕添加到選項卡,然後關閉四個選項卡中的第二個選項卡,然後將該選項卡添加到(從菜單)時,選項卡將是最後一個。會索引變化? – 1ac0 2012-02-08 09:30:36

+0

好的,在詳細闡述了最終的(?)決定之後:tab的順序基於應用程序啓動順序 - 「jTabbedPane.addTab(」Test tab 1「,null,panelTest1,null)」的順序。即使選項卡已關閉,然後在應用程序生命週期中重新打開,這也不會改變。所以如果選項卡已經在位置0,然後關閉,然後programaticaly在位置4重新打開,索引stil爲0. – 1ac0 2012-02-08 14:21:03

回答

2

Now I would like populate data for each JTable at the moment when I click on JTabbedPane (tab).

不這樣做,這樣一來,因爲Swing GUI的是un_responsive或凍結,直到重和長期任務結束了,你要這個TAKS重定向到後臺任務,對於Swing GUI的有兩種方法

  • Runnable#Thread,發現所有的輸出到了Swing GUI必須內的invokeLater()包裹,example

那麼這種方式應該是user_non_friendly,讓用戶更新JTable中的內容從一個JButton

+0

是的,我現在這個數據檢索將在後臺任務和數據庫交談時,將模態jdialog「請等待,數據加載...「 – 1ac0 2012-02-08 09:54:42

0

我想你應該註冊帶有JTabbedPane的事件處理程序。它會給你選定的Tab,然後根據你可以填充特定於JTab的Jtable。

例如:

    tabbedPane.addChangeListener(new ChangeListener() { 

     @Override 
     public void stateChanged(ChangeEvent arg0) { 
      // TODO Auto-generated method stub 
      if((((JTabbedPane)arg0.getSource()).getSelectedIndex())==0) 
          { 
           //Load Jtable associated with first JTab 
          } 

     } 
    }); 
+0

當然,經過一些闡述,我檢查瞭如果我有jtabbedpane上的4個選項卡,然後programaticaly關閉並重新打開選項卡,索引將是相同的,如果位置改變無關緊要。索引是基於app第一次啓動並且不會改變。 因此每個jpanel都會知道它的索引,並且在主應用程序類中應該是公共靜態變量,所以應用程序知道實際打開的選項卡。每個jpanel都會檢查這個屬性,以便決定是否重新載入數據。 – 1ac0 2012-02-08 14:46:22