2012-01-17 2 views
1

私は、特定のタスクに関連するボタンをクリックすると、タブ内のメインタスクを示すようなスイングアプリケーションを作成しました。各タブに小さなクローズボタンを追加しました。そのタブに関連するクローズボタンをクリックすると、そのタブを閉じることになります。タブペインからタブを削除する方法

enter image description here

閉じるボタンが蛇腹のようにJPanelのクラスフロン拡張されるクラスである、

public class CloseTab extends JPanel { 

    JLabel title = new JLabel(); 
    JButton closeButton = new JButton(); 
    int tabIndex; 
    JTabbedPane tabbedPane = null; 
    public static int SELECTED_TAB_INDEX; 
    . 
    . 
    .  

    public static void setSELECTED_TAB_INDEX(int SELECTED_TAB_INDEX) { 
     CloseTab.SELECTED_TAB_INDEX = SELECTED_TAB_INDEX; 
    } 

    . 
    . 

    public void setCloseAction(ActionListener al) { 
     closeButton.addActionListener(al); 
     closeButton.setSize(10, 10); 
     closeButton.setBorder(new EmptyBorder(0, 0, 0, 0)); 
     closeButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/ofm/mnu/icons/delete.gif"))); 

    } 

    public void setTabIndex(int index) { 
     this.tabIndex = index; 
     System.out.println(tabIndex); 
    } 

    public void init() { 
     add(title); 
     add(closeButton); 
     setOpaque(false); 
     setCloseAction(closeActoion);  

    } 



    ActionListener closeActoion = new ActionListener() { 

     public void actionPerformed(ActionEvent e) { 
      // System.out.println(tabIndex); 
      if(tabbedPane.getTabCount() != 0 && tabbedPane.getSelectedIndex() == SELECTED_TAB_INDEX){ 
       tabbedPane.remove(SELECTED_TAB_INDEX); 
      } 
     } 
    }; 

} 

とメインフレームに、私は次のようにSELECTED_TAB_INDEX変数をseted

tbpWorkSpace.addChangeListener(new ChangeListener() { 

      public void stateChanged(ChangeEvent e) { 
       JTabbedPane a = (JTabbedPane) e.getSource(); 
       CloseTab pnl = new CloseTab();     
       pnl.setSELECTED_TAB_INDEX(a.getSelectedIndex()); 
      } 
     }); 

しかし、私は結果を得ることができませんでした私が望む結果を達成するための他の方法があるか教えてください。

+1

正確に何が問題なのですか? tabbedPaneからタブを削除するボタンにアクションを設定するだけです。 – kleopatra

+0

異なるタブ区画インスタンスに混在しているようです。 'stateChanged'メソッドの変数' a'は 'CloseTab'クラスの' tabbedPane'変数と同じですか?はいの場合、そのtabbedPaneにchangeListenerを追加しないのはなぜですか? –

+0

> @ハリー・ジョイ(Haryry Joy) - 私が必要とする仕事のために長くて間違った道を歩んできたと思います。あなたの方法が間違っているようです。どうもありがとう。 – Harsha

答えて

0
private void removeTabWithTitle(String tabTitleToRemove) { 
    for (int i = 0; i < tabbedPane.getTabCount(); i++) { 
     String tabTitle = tabbedPane.getTitleAt(i); 
     if (tabTitle.equals(tabTitleToRemove)) { 
      tabbedPane.remove(i); 
      break; 
     } 
    } 
} 
関連する問題