2009-06-12 96 views
3

我有以下代碼:JTabbedPane.getTabComponentAt(INT)返回null

JTabbedPane container; 
... 
AWindow page = WinUtils.buildWindow(); 
boolean existing = checkIfExists(page); // in this code, this will always be false 
if(!existing) 
{ 
    String tabName = page.getLoadedFileLocation().getName(); 
    container.addTab(page.getLoadedFileLocation().getName(), page); 
} 
Component comp = container.getTabComponentAt(0); 
int sel = container.getSelectedIndex(); 
container.setSelectedComponent(page); 

的事情是:

container.getTabComponentAt(0) 

回報null。另一個奇怪的是:

container.getSelectedIndex() 

返回0。我認爲應該發生的合乎邏輯的事情是對已創建的窗口進行引用。爲什麼我收到null?我究竟做錯了什麼?

回答

14

getTabComponentAt()返回您可能添加的自定義組件作爲選項卡標題。您可能正在尋找getComponentAt()方法來返回標籤的內容。 getSelectedIndex()只是返回第一個選項卡當前選中(它將返回-1沒有選項卡選擇)

6

你混淆了JTabbedPane中的兩組方法:選項卡組件方法和組件方法。

getTabComponentAt(0)正在返回null,因爲您尚未設置選項卡組件。您已設置在索引0處顯示的組件,但選項卡組件是呈現選項卡的組件 - 而不是顯示在窗格中的組件。

(注意在Javadocs的例子:

// In this case the look and feel renders the title for the tab. 
tabbedPane.addTab("Tab", myComponent); 
// In this case the custom component is responsible for rendering the 
// title of the tab. 
tabbedPane.addTab(null, myComponent); 
tabbedPane.setTabComponentAt(0, new JLabel("Tab")); 

當你想要求的標籤上的定製組件的更復雜的用戶交互,後者通常用於例如,可以提供自定義組件動畫或一個有小部件關閉標籤。

通常情況下,你不會需要與標籤成分混亂。)

無論如何,請改爲嘗試getComponentAt(0)