我有以下代码:
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
?我做错了什么?
答案 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)
。