我现在尝试了几个小时来优化我的用户界面,但我现在没有进一步了解。 我有一个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;
}
有什么想法吗?
答案 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给出的解决方案非常相似。