Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 按钮组件在JTabbedPane中添加AquaTabbedPaneCopyFromBasicUI$TabContainer_Java_Swing_Jtabbedpane - Fatal编程技术网

Java 按钮组件在JTabbedPane中添加AquaTabbedPaneCopyFromBasicUI$TabContainer

Java 按钮组件在JTabbedPane中添加AquaTabbedPaneCopyFromBasicUI$TabContainer,java,swing,jtabbedpane,Java,Swing,Jtabbedpane,我基本上是想在jtabbedpane的每个选项卡中添加一堆JPanel,它自己就可以很好地工作。但是,当遵循Java教程向每个选项卡添加closingbuttons时,它会在第一次(而且仅是第一次)添加按钮之后将这个奇怪的tabContainer添加到jtabbedpane。我意识到Aqua与mac有关,但问题仍然出现在linux和windows上 我基本上在做: JTabbedPane pane; this.add("channel",new JTextArea("texttexttext"

我基本上是想在jtabbedpane的每个选项卡中添加一堆JPanel,它自己就可以很好地工作。但是,当遵循Java教程向每个选项卡添加closingbuttons时,它会在第一次(而且仅是第一次)添加按钮之后将这个奇怪的tabContainer添加到jtabbedpane。我意识到Aqua与mac有关,但问题仍然出现在linux和windows上

我基本上在做:

JTabbedPane pane;

this.add("channel",new JTextArea("texttexttext"));

ButtonTabComponent ctb = new ButtonTabComponent(pane);

this.setTabComponentAt(pane.indexOfTab("channel"),ctb);
第一个选项卡也可以很好地工作,但接下来添加的所有选项卡都被一个索引覆盖,因为AquaTabbedPaneCopyFromBasicUI$TabContainer,如屏幕截图所示。因此,当我试图让他们离开选项卡窗格来更新一些信息(检查下面链接的代码)时,我无法转换它,因为从indexOfTab(通道)返回的索引是aqua的索引

调试截图和jtabbedPane的数组:

更糟糕的是,我无法删除选项卡窗格中的索引2,我只是摆脱了BoundsException,但我可以使用getComponent(2),(这是我第一次发现错误的地方,因为我可以获取组件(标题),它尝试返回Aqua…然后我无法将其转换为所需的单个选项卡对象)

这是一个超现实的问题,可能看起来有些你不得不做的事情是错误的,但我已经做了一个星期了,在让几个人看了之后,我还没有找到解决办法。(当然,这可能是一个戈达姆-努拉杜巴斯难题)

希望这对某人有意义

有关守则: tabHandler:

如果要查看其他引用内容,请进行注释

sscce:

包jtabbetest;
导入javax.swing.JFrame;
导入javax.swing.JTabbedPane;
导入javax.swing.JTextArea;
/**
*
*@作者hallvardwestman
*/
公共类Jtabbedtest{
/**
*@param指定命令行参数
*/
公共静态void main(字符串[]args){
//此处的TODO代码应用程序逻辑
JFrame jf=新JFrame();
JTabbedPane jt=新JTabbedPane();
//调试检查jtabbedpane中的内容
对象[]o=jt.getComponents();
jf.add(jt);
jt.addTab(“a”,新JTextArea(“a”);
int tabIndex=jt.indexOfTab(“a”);
按钮组件ctb=新按钮组件(jt);
jt.setTabComponentAt(tabIndex,ctb);
/*
*添加关闭按钮
*/
//调试检查jtabbedpane中的内容
o=jt.getComponents();
jf.setVisible(真);
jf.setDefaultCloseOperation(JFrame.EXIT\u ON\u CLOSE);
}
}
就这样说吧:http://docs.oracle.com/javase/tutorial/displayCode.html?code=http://docs.oracle.com/javase/tutorial/uiswing/examples/components/TabComponentsDemoProject/src/components/ButtonTabComponent.java    在一个名为ButtonTabComponent的新文件中

目前,我正在开发使用JTabbedPane的应用程序,添加、删除所选选项卡、其他选项卡和所有选项卡对我来说都很好

首先,您应该(而不是必须)提供整型变量来保存已有选项卡的总和,比如说它称为tabCount

检查选项卡窗格中是否存在选项卡的代码:

private boolean isTabExist(String title) {
    for (int i = 0; i < tabCount; i++) {
        if (jTabbedPane1.getTitleAt(i).equalsIgnoreCase(title)) {
            jTabbedPane1.setSelectedIndex(i);
            return true;
        }
    }
    return false;
}
删除选定选项卡(在任何索引中)的步骤


请尝试上面的代码,并告诉我您是否仍然在删除某个索引处的选项卡时遇到问题…

请提供一个显示您描述的问题的示例。如果在o=jt.getComponents()处设置断点,则添加一个快速sscce,可以得到相同的结果;您可以看到,它同时包含一个jtextarea和一个我从Basicui$TabContainer获得的AquaTabbedPaneCopyFromBasicUI.。在方法SeljeIRC.tabHandler.createNewTab(String,int)中,我们不应该这样做吗;而不是这个。添加(频道,st)?顺便说一句,如果你想在你的选项卡式窗格中添加关闭功能,我建议——就像我做的那样——在右键单击每个选项卡时创建弹出菜单,显示关闭选项卡,或者另外关闭其他和所有选项卡。我也在做这件事,它对我来说很好。很抱歉,这个问题通过黑客破解解决了,项目也完成了。感谢您的回复,看起来您的代码已经完成了这个任务。
if (!isTabExist("My Tab")) {
        jTabbedPane1.insertTab("My Tab", null, yourCustomPanel, "My tab", tabCount);
        jTabbedPane1.setSelectedIndex(tabCount);
        tabCount = jTabbedPane1.getTabCount();            
    }
jTabbedPane1.remove(jTabbedPane1.getSelectedIndex());  // remove selected tab
tabCount = jTabbedPane1.getTabCount();