JTabbedPane:从标签内更改标题

时间:2015-01-13 15:36:22

标签: java swing jtabbedpane

我现在尝试了几个小时来优化我的用户界面,但我现在没有进一步了解。 我有一个JTabbedPane来显示数据集。其中有一个文本字段也应该代表标签标题。现在有一个标有"按钮"的按钮。除了从当前选项卡中读取此文本字段并更新选项卡标题之外,别无其他操作。我希望在更改字段时更新标签的标题来替换它。我启动并运行了事件监听器,所以这里没有问题,但是如何调用JTabbedPane对象? 我试图将一个JTabbedPane变量放入我的JPanel类并在这里存储一个引用,但是当我为这个变量调用setter时,这会一直崩溃... 好吧,实际上并没有崩溃,但它引发了异常:

Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
at java.util.ArrayList.rangeCheck(ArrayList.java:635)
at java.util.ArrayList.get(ArrayList.java:411) 
[...]

setter非常简单:

public void setTabContainer(JTabbedPane cont){
    container = cont;
 }

有什么想法吗?

3 个答案:

答案 0 :(得分:5)

  

我启动并运行了事件监听器,所以这里没有问题,但是如何调用JTabbedPane对象?

您可以按如下方式使用SwingUtilities类来获取作为文本字段祖先的选项卡式窗格:

JTabbedPane tabbedPane = (JTabbedPane)SwingUtilities.getAncestorOfClass(JTabbedPane.class, textField);

然后,您可以遍历选项卡式窗格的组件,以查找放置文本字段的索引,最后更新选项卡的标题:

for(int i = 0; i < tabbedPane.getTabCount(); i++) {
    if(SwingUtilities.isDescendingFrom(textField, tabbedPane.getComponentAt(i))) {
        tabbedPane.setTitleAt(i, textField.getText());
        break;
    }
}

请参阅API:

答案 1 :(得分:1)

尝试:

JTabbedPane tabbedPane = (JTabbedPane) SwingUtilities.getAncestorOfClass(JTabbedPane.class, this);
tabbedPane.setTitleAt(tabbedPane.indexOfTabComponent(this), title);

假设this是标签组件,title是新标题。请注意,您必须将this设置为标签的内容。

用途:

答案 2 :(得分:0)

IntelliJ IDEA's form designer中,每个标签都是JPanel,因此您可以使用以下方法在Java代码中设置标题:

public static void setTabTitle(JPanel tab, String title)
{
    JTabbedPane tabbedPane = (JTabbedPane) SwingUtilities.getAncestorOfClass(JTabbedPane.class, tab);

    for (int tabIndex = 0; tabIndex < tabbedPane.getTabCount(); tabIndex++)
    {
        if (SwingUtilities.isDescendingFrom(tab, tabbedPane.getComponentAt(tabIndex)))
        {
            tabbedPane.setTitleAt(tabIndex, title);
            break;
        }
    }
}

此解决方案与dic19给出的解决方案非常相似。