3

jTabbedPane に閉じるボタンを配置するために、メイン クラス内にこのクラスがあります。問題は、たとえば、タブのジャーナル、連絡先、およびアップロードの 3 つのタブを開いていることです。タブの連絡先は現在選択されているタブです。選択したタブではないジャーナル タブを閉じようとすると、現在選択されているタブが閉じます。

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());
}

これは私がタブを呼び出すために行うことです:

menuTabbedPane.setTabComponentAt(menuTabbedPane.indexOfComponent(jvPanel), new Tab("contactPanel"));
4

2 に答える 2

4

メソッドactionPerformed()はメソッドを呼び出しますcloseTab()。このメソッドは、現在選択されているタブをタブ付きペインからcloseTab()削除します。

代わりに、クリックされたボタンでタブに対応するコンポーネントを削除する必要があります。

を作成するときにTab、タブペインのコンテンツであるコンポーネントもコンストラクターに渡します。次に、それをactionPerformed()メソッドで使用して、コンポーネントをに渡すことができますcloseTab()

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

private void closeTab(JComponent component)
{
  menuTabbedPane.remove(component);
}

ここにもう少しコンテキストがあります:

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

そしてタブで..。

public Tab(String label, final JComponent component)
{
  ...
  closeTab.addActionListener(new ActionListner()
  {
    public void actionPerformed(ActionEvent e)
    {
      closeTab(component);
    }
  });
  ...
}
于 2012-05-10T01:58:42.660 に答える
1

getSelectedComponent() を削除すると、選択したタブが常に削除されます。ジャーナル タブを削除する場合は、ジャーナル タブ コンポーネントを remove メソッドに渡す必要があります。

于 2012-05-10T01:54:55.220 に答える