关闭单击的选项卡,而不是当前选定的选项卡JTabbedPane

Joh*_*ohn 3 java swing actionlistener jtabbedpane

我在我的主类中有这个类,在我的jTabbedPane上放一个关闭按钮.问题是,例如我打开了三个选项卡:选项卡日记,联系人和上传,选项卡联系人是当前选定的选项卡.当我尝试关闭不是所选选项卡的日志选项卡时,关闭的选项卡是当前选定的选项卡.

class Tab extends javax.swing.JPanel implements java.awt.event.ActionListener{
    @SuppressWarnings("LeakingThisInConstructor")
    public Tab(String label){
        super(new java.awt.BorderLayout());
        ((java.awt.BorderLayout)this.getLayout()).setHgap(5);
        add(new javax.swing.JLabel(label), java.awt.BorderLayout.WEST);
        ImageIcon img = new ImageIcon(getClass().getResource("/timsoftware/images/close.png"));
        javax.swing.JButton closeTab = new javax.swing.JButton(img);
        closeTab.addActionListener(this);
        closeTab.setMargin(new java.awt.Insets(0,0,0,0));
        closeTab.setBorder(null);
        closeTab.setBorderPainted(false);
        add(closeTab, java.awt.BorderLayout.EAST);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        closeTab();    //function which closes the tab          
    }

}

private void closeTab(){
    menuTabbedPane.remove(menuTabbedPane.getSelectedComponent());
}
Run Code Online (Sandbox Code Playgroud)

这就是我调用选项卡的方法:

menuTabbedPane.setTabComponentAt(menuTabbedPane.indexOfComponent(jvPanel), new Tab("contactPanel"));
Run Code Online (Sandbox Code Playgroud)

Gre*_*pff 5

您的actionPerformed()方法调用您的closeTab()方法.您的closeTab()方法从选项卡式窗格中删除当前选定的选项卡.

相反,您需要使用单击的按钮删除与选项卡对应的组件.

在创建自己的时候Tab,也会将构成器作为选项卡窗格内容传递给构造函数.然后,您可以在actionPerformed()方法中使用它,并将组件传递给closeTab()

public void actionPerformed(ActionEvent e)
{
  closeTab(component);
}

private void closeTab(JComponent component)
{
  menuTabbedPane.remove(component);
}
Run Code Online (Sandbox Code Playgroud)

这里有更多的背景:

tab = new Tab("The Label", component);          // component is the tab content
menuTabbedPane.insertTab(title, icon, component, tooltip, tabIndex);
menuTabbedPane.setTabComponentAt(tabIndex, tab);
Run Code Online (Sandbox Code Playgroud)

并在Tab ...

public Tab(String label, final JComponent component)
{
  ...
  closeTab.addActionListener(new ActionListner()
  {
    public void actionPerformed(ActionEvent e)
    {
      closeTab(component);
    }
  });
  ...
}
Run Code Online (Sandbox Code Playgroud)