Java 发出JTabbedPane命令
最近,我在索引选项卡时遇到了一些问题,尽管我会使用Java 发出JTabbedPane命令,java,swing,jtabbedpane,Java,Swing,Jtabbedpane,最近,我在索引选项卡时遇到了一些问题,尽管我会使用setComponentAt方法对其进行一些具体的排序。这是我的密码: public ContainerPane() { this.setLayout(new BorderLayout()); myPlayerManagerPane = new PlayerManagerPane(); myGameManagerPane = new GameManagerPane(); myCharacterManagerPane
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);
}
我在哪里绊倒了,有没有更简单的方法来订购窗格玻璃
编辑:注释掉setComponent
方法,并放入for循环,我得到以下输出:
有3个标签0处的制表符为字符
1处的选项卡是播放器
第二页是游戏 一次取消注释一对方法,我只得到两个,一个是我没有覆盖的,另一个是我现在设置的
setComponentAt
是否正在删除重复项?我的设置是否应该少于3个选项卡?JTabbedPanel对于重复窗格是否有奇怪的行为?如果您希望选项卡按其他顺序添加,请按其他顺序添加它们:
myPaneTab = new JTabbedPane(JTabbedPane.TOP);
myPaneTab.addTab("Player",myPlayerManagerPane);
myPaneTab.addTab("Character",myCharacterManagerPane);
myPaneTab.addTab("Games",myGameManagerPane);
Et voilá。我不确定setComponentAt是如何或为什么不工作的,尽管可能是制表符使用向量这一事实,我听说它们不好 如果希望有固定的添加顺序,只需使用
insertTab
如下所示:
myPaneTab.insertTab("Games",null, myGameManagerPane,"CharacterManagerPane",2);
其中null表示图标,不接受它作为空参数
这样,您就可以在源代码中知道选项卡的索引。唯一的问题是,您不能在超过当前tabCount的索引处添加新选项卡(您可以通过getTabCount
找到),也就是说,您不能使用选项卡计算1,3,4
我相信您可以编写一个新的JTabb类,并重载
insertTab
方法来做一些更有帮助的事情,但它可能会混淆选项卡的位置(也就是说,你可以告诉它把标签放在索引2,它进入索引1。查看setComponentAt的源代码,你可以看到你正在设置的组件被删除了:
int count = getComponentCount();
Component children[] = getComponents();
for (int i = 0; i < count; i++) {
if (children[i] == page.component) {
super.remove(i);
}
}
因此,设置现有选项卡组件的顺序时,最终会出现两个选项卡。由于尝试进行的更改,您会遇到一个错误-通过将一些窗格放到另一个位置,您会自动删除另一个选项卡。这就是为什么会出现错误-在某些更改后,选项卡少于3个(您可以检查每次“setComponentAt”操作后的输出选项卡数量)
只需删除所有要重新排序的选项卡,然后使用addTab或insertTab读取它们-这将使工作顺利完成。这很好,但我遇到了一些问题,无法确定我的选项卡的选项卡索引是什么…这就是为什么我要给出索引。只有在添加选项卡时才能确定顺序,如上所述,在代码的其余部分,请向选项卡式窗格请求索引:int indexOfGame=tabbedPane.indexOfTabComponent(myGameManagerPane);
。这将只允许在一个位置重新排列选项卡。代码的其余部分将保持不变。
int count = getComponentCount();
Component children[] = getComponents();
for (int i = 0; i < count; i++) {
if (children[i] == page.component) {
super.remove(i);
}
}
page.component = component;