JTabbedPane:从 Tab 内更改标题
JTabbedPane: Change Title from within Tab
我现在正在尝试几个小时来优化我的用户界面,但我现在没有进一步的进展。
我有一个 JTabbedPane 来显示数据集。那里有一个文本字段也应该代表选项卡标题。现在有一个标记为 "save" 的按钮,它除了从当前选项卡中读取此文本字段并更新选项卡标题外什么都不做。我很乐意在字段更改时通过更新选项卡的标题来替换它。我启动了事件侦听器 运行,所以这里没有问题,但是如何调用 JTabbedPane object?
我试图将一个 JTabbedPane 变量放入我的 JPanel class 并在此处存储一个引用,但是当我为此变量调用 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;
}
有什么想法吗?
I got the event listener up and running, so no problems here, but how to I get to call the JTabbedPane object?
您可以按如下方式使用 SwingUtilities
class 来获取作为文本字段祖先的选项卡式窗格:
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 的内容:
在 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 给出的解决方案非常相似。
尝试:
JTabbedPane tabbedPane = (JTabbedPane) SwingUtilities.getAncestorOfClass(JTabbedPane.class, this);
tabbedPane.setTitleAt(tabbedPane.indexOfTabComponent(this), title);
假设this
是标签组件,title
是新标题。请注意,您必须已将 this
设置为选项卡的内容。
使用:
我现在正在尝试几个小时来优化我的用户界面,但我现在没有进一步的进展。 我有一个 JTabbedPane 来显示数据集。那里有一个文本字段也应该代表选项卡标题。现在有一个标记为 "save" 的按钮,它除了从当前选项卡中读取此文本字段并更新选项卡标题外什么都不做。我很乐意在字段更改时通过更新选项卡的标题来替换它。我启动了事件侦听器 运行,所以这里没有问题,但是如何调用 JTabbedPane object? 我试图将一个 JTabbedPane 变量放入我的 JPanel class 并在此处存储一个引用,但是当我为此变量调用 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;
}
有什么想法吗?
I got the event listener up and running, so no problems here, but how to I get to call the JTabbedPane object?
您可以按如下方式使用 SwingUtilities
class 来获取作为文本字段祖先的选项卡式窗格:
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 的内容:
在 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 给出的解决方案非常相似。
尝试:
JTabbedPane tabbedPane = (JTabbedPane) SwingUtilities.getAncestorOfClass(JTabbedPane.class, this);
tabbedPane.setTitleAt(tabbedPane.indexOfTabComponent(this), title);
假设this
是标签组件,title
是新标题。请注意,您必须已将 this
设置为选项卡的内容。
使用: