2011-12-13 144 views
2

我有一個Jtabbedpane,其中包含4個選項卡(每個Jpanel)。顯示JTabbedPane的第一個選項卡

當我從netbeans 6.8運行應用程序時,選定的選項卡將與關閉應用程序之前選定的選項卡相同。

有沒有辦法在每次運行我的應用程序時選擇第一個選項卡(索引0)? 這裏是代碼:

mainTabbedPanel = new javax.swing.JTabbedPane(); 
mainTabbedPanel.setName("mainTabbedPanel"); 
mainTabbedPanel.addTab(resourceMap.getString("panel1"), panel1); 
mainTabbedPanel.addTab(resourceMap.getString("panel2"), panel2); 
mainTabbedPanel.addTab(resourceMap.getString("panel3"), panel3); 
mainTabbedPanel.addTab(resourceMap.getString("panel4"), panel4); 

這些都是在NetBeans 的方法私人無效的initComponents(),並在啓動時(我的應用程序的構造函數)的initComponents將被調用。 我嘗試在調用initComponents()後放置mainTabbedPanel.setSelectedIndex(0),但沒有奏效。

+3

http://docs.oracle.com/javase/6/docs/api/javax/swing/JTabbedPane.html#setSelectedIndex%28int%29 –

+0

@JB_Nizet但是有是關於這個應用程序記憶JTabbedPane狀態的事實真的很奇怪。我想這與它的構建方式有關(例如使用Matisse)。 – Riduidel

+0

@Riduidel是的,你是對的。但我沒有找到如何總是顯示第一個標籤。有什麼建議麼? – Joe123

回答

6

默認情況下,第一個選項卡將被選中。如果除此之外的事情發生,那麼必須在某處使用setSelectedIndex(...)重置選項卡。您需要搜索生成的代碼以找出它的位置並刪除代碼。

如果您不知道如何刪除代碼,那麼您可以嘗試在默認代碼執行後重置索引。這是通過在GUI可見後使用SwingUtilities.invokeLater完成的。您的代碼會是這樣的:

SwingUtilities.invokeLater(new Runnable() 
{ 
    public void run() 
    { 
     tabbedPane.setSelectedIndex(0); 
    } 
}); 
+1

非常感謝你camickr。有用。 – Joe123

+0

@ Joe123顯然它可以工作,就像文檔可以更快地解釋你一樣。但是我不認爲這對你有好處,因爲這個問題明顯存在於StackOverflow內存中。 – Riduidel

+0

@Riduidel,你仍然不明白這個問題。默認情況下顯示第一個選項卡。沒有必要手動將索引設置爲0.因此,「讀取API」不是您所暗示的簡單答案。我的回答給出了問題和解決方案的潛在原因。同樣,如果代碼中的某個位置手動設置了選定的選項卡,那麼將選定選項卡重置爲0的代碼位置非常重要,因此可能需要invokeLater()。所以它不是很明顯的解決方案。更好的建議是發佈SSCCE。 – camickr

相關問題