我最近遇到了索引选项卡的问题,尽管我会通过使用setComponentAt
方法对其进行一些具体排序。这是我的代码:
public ContainerPane() {
this.setLayout(new BorderLayout());
myPlayerManagerPane = new PlayerManagerPane();
myGameManagerPane = new GameManagerPane();
myCharacterManagerPane = new CharacterManagerPane();
myPaneTab = new JTabbedPane(JTabbedPane.TOP);
myPaneTab.addTab("Character",myCharacterManagerPane);
myPaneTab.addTab("Player",myPlayerManagerPane);
myPaneTab.addTab("Games",myGameManagerPane);
System.out.println(myPaneTab.getTabCount());
//myPaneTab.setEnabledAt(1, false);
//myPaneTab.setEnabledAt(2, false);
myPaneTab.setComponentAt(0, myPlayerManagerPane);
myPaneTab.setMnemonicAt(0, KeyEvent.VK_1);
myPaneTab.setComponentAt(1, myCharacterManagerPane);
myPaneTab.setMnemonicAt(1, KeyEvent.VK_2);
myPaneTab.setComponentAt(2, myGameManagerPane);<---outOfBoundsException
myPaneTab.setMnemonicAt(2, KeyEvent.VK_3);
add(myPaneTab);
}
因此,对于我的计数,有3个选项卡(根据我和
getTabCount()
),我从0开始计数(对吗?)。我将最后一个索引设置为我拥有的最后一个组件。但我仍然可以在屏幕上打印以下内容:3 <---from tabCount
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 2 >= 2
我在哪里绊倒,有没有更简单的方式订购窗格?
编辑:注释掉
setComponent
方法,并放入for循环中,我得到以下输出:有3个标签!
制表符在0是字符
制表符在1是播放器
标签在2是游戏
一次取消注释一对方法,我只有2个未覆盖的方法,以及我现在设置的一种方法。
setComponentAt
是否删除重复项?设置的选项卡少于3个吗?对于重复的窗格,JTabbedPanel是否具有异常行为? 最佳答案
由于您要进行更改,因此会出现错误-通过将某些窗格置于另一个位置,您会自动删除另一个选项卡。这就是为什么会出现错误的原因-一些更改后的选项卡少于3个(您可以检查每个“setComponentAt”操作后输出的选项卡数量)。
只需删除所有要重新排序的标签,然后使用 addTab 或 insertTab 读取它们即可完成工作,而不会出现任何错误。