2012-01-17 152 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; 
     } 
    } 
}