JTabbedPane:从标签内更改标题

dat*_*tmw 4 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) 
[...]
Run Code Online (Sandbox Code Playgroud)

二传手很简单:

public void setTabContainer(JTabbedPane cont){
    container = cont;
 }
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

dic*_*c19 5

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

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

JTabbedPane tabbedPane = (JTabbedPane)SwingUtilities.getAncestorOfClass(JTabbedPane.class, textField);
Run Code Online (Sandbox Code Playgroud)

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

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

请参阅API: