2012-01-17 150 views
1

我已經創建了一個swing應用程序,如下圖所示,在單擊與特定任務相關的按鈕時顯示選項卡中的主要任務。我爲每個選項卡添加了一個小關閉按鈕,當點擊與該選項卡相關的關閉按鈕時,我需要關閉該選項卡。如何從選項卡窗格中刪除選項卡

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

} 

,並在主幀I seted的SELECTED_TAB_INDEX變量作爲跟隨,

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 2012-01-17 10:33:22

+0

看起來好像您在不同的選項卡式窗格實例中混合了一樣。 「stateChanged」方法中的變量「a」與「CloseTab」類中的「tabbedPane」變量相同嗎?如果是,那麼爲什麼不將changeListener添加到該tabbedPane? – 2012-01-17 10:52:33

+0

> @Harry Joy--我想我已經走了一條漫長而錯誤的道路來完成我所需要的任務,看起來你的方法非常正確。非常感謝。 – Harsha 2012-01-17 10:59:23

回答

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