2009-06-12 2 views
3

У меня есть следующий код:JTabbedPane.getTabComponentAt (интермедиат) возвращение нуль

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, но компонент tab - это компонент, который отображает вкладку, а не компонент, отображаемый на панели.

(Обратите внимание на пример в 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).