JTabbedPane.getTabComponentAt(int) возвращает ноль

У меня есть следующий код:

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? Что я делаю неправильно?


person Geo    schedule 12.06.2009    source источник


Ответы (2)


getTabComponentAt() возвращает пользовательский компонент, который вы можете добавить в качестве заголовка вкладки. Возможно, вы ищете метод getComponentAt() для возврата содержимого вкладки. getSelectedIndex() просто возвращает, что в данный момент выбрана первая вкладка (он вернет -1, если вкладки не выбраны)

person akarnokd    schedule 12.06.2009

Вы путаете два набора методов в 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) вместо.

person Michael Myers    schedule 12.06.2009