我最近遇到了索引选项卡的问题,尽管我会通过使用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 读取它们即可完成工作,而不会出现任何错误。

07-27 20:59