有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JTabbedPane的java问题

我对以下代码有问题:

public void detachTab(TabComponent tc) {
    Logger.add("Detaching Tab");
    for (int i = 0; i < globalTabbedPane.getTabCount(); i++) {
        if (tc == globalTabbedPane.getTabComponentAt(i)) {
            Logger.add("Detaching panel: " + i);
            SeparateWindow sw = new SeparateWindow((JPanel) globalTabbedPane.getComponentAt(i));
            sw.setVisible(true);

            globalTabbedPane.remove(i);
            return;
        }
    }
}

它只是从JTabbedPane中删除一个选项卡,并将其放置在一个单独的窗口中。非常自我嘲弄。问题是该方法还删除了它下面的选项卡。我不明白这怎么可能。也许我忽略了什么


共 (1) 个答案

  1. # 1 楼答案

    我没有测试过这个,但是

    SeparateWindow sw = new SeparateWindow((JPanel) globalTabbedPane.getComponentAt(i))
    

    可能是将Component添加到窗口中,将其从JTabbedPane中删除,此时tabbedpane可能正在删除关联的选项卡,这意味着索引位置已更改,因此当您调用

    globalTabbedPane.remove(i);
    

    您现在正在删除以下选项卡

    您可以尝试获取对组件的引用,删除它并创建窗口

    JPanel pane = (JPanel) globalTabbedPane.getComponentAt(i); 
    globalTabbedPane.remove(i);
    SeparateWindow sw = new SeparateWindow(pane);