JTabbedPane.getTabComponentAt(int)返回null

时间:2009-06-12 19:56:17

标签: java swing jtabbedpane

我有以下代码:

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?我做错了什么?

2 个答案:

答案 0 :(得分:16)

getTabComponentAt()返回您可能添加为标签标题的自定义组件。您可能正在寻找getComponentAt()方法来返回选项卡的内容。 getSelectedIndex()只返回当前选中的第一个选项卡(如果没有选中选项卡,它将返回-1)

答案 1 :(得分:6)

您在JTabbedPane中混淆了两组方法:标签组件方法和组件方法。

getTabComponentAt(0)正在返回null,因为您尚未设置标签组件。您已设置索引0处显示的组件,但选项卡组件是呈现选项卡的组件 - 而不是窗格中显示的组件。< / p>

(请注意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)