2012-05-10 10 views
3

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

これは私がタブ呼び出すために何をすべきかです:あなたはジャーナルタブを削除したい場合は、合格する必要がある、あなたは常に選択したタブを削除します)getSelectedComponentを(除去することにより

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

...:次に、あなたはactionPerformed()方法であることを利用し、closeTab()

public void actionPerformed(ActionEvent e) { closeTab(component); } private void closeTab(JComponent component) { menuTabbedPane.remove(component); } 

にコンポーネントを渡すことができますここではもう少し文脈ですより良いヘルプを早く得るには、sscce](http://www.sscce.org)を含めてください。 – user1329572

+0

*現在選択されている* *を削除したようです。閉じようとしているタブのインデックスを知る必要があります。 –

+0

どうすればいいですか?申し訳ありません。タブクラスにゲッター/セッターを作成する必要がありますか? – John

答えて

5

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

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

Tabを作成するときは、タブペインのコンテンツであるコンポーネントもコンストラクターに渡します。

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); 
    } 
    }); 
    ... 
} 
+0

これで動作します。ありがとうございました! :) – John

+0

@ Greg setTabComponentAt(tabIndex、tab)をsetTabComponentAtIndex(tabIndex、tab)にする必要がありますか?私は前者との間に誤りがある。 – KisnardOnline

+0

@JayAvon:はいのように見えますが、それはタイプミスです - 回答を編集します。ありがとう。 –

1

をジャーナルタブコンポーネントを削除メソッドに追加します。

+0

どうすればいいですか?申し訳ありません。タブクラスにゲッター/セッターを作成する必要がありますか? – John

関連する問題