JTabbedPane实现关闭按钮

转自:http://blog.csdn.net/pzhtpf/article/details/7645023


JTabbedPane如切换卡一般,大大的优化了布局,方便用户操作。Java默认的JTabbedPane添加tab时只会显示一个标题,咱们这里来给它实现关闭按钮,当鼠标移上这个tab时,便显示关闭按钮,移除时,便隐藏。也没什么好说的,实现代码如下:

 

 

[plain]  view plain copy
  1. import java.awt.GridLayout;  
  2.   
  3. import java.awt.event.MouseEvent;  
  4.   
  5. import java.awt.event.MouseListener;  
  6.   
  7. import javax.swing.JLabel;  
  8.   
  9. import javax.swing.JPanel;  
  10.   
  11.    
  12.   
  13. public class addTab implements MouseListener{  
  14.   
  15.     JPanel jp;  
  16.   
  17.     JLabel lab ;  
  18.   
  19.     JLabel lab3=new JLabel();  
  20.   
  21.     public addTab(){  
  22.   
  23.        lab= new JLabel("选项卡1");  
  24.   
  25.        JLabel lab1 = new JLabel("选项卡");  
  26.   
  27.         jp=new JPanel();  
  28.   
  29.        GridLayout gl= new GridLayout(1,1,10,0);  
  30.   
  31.        jp.setLayout(gl);  
  32.   
  33.        lab1.setHorizontalAlignment(JLabel.LEFT);//设置文字显示在最左边  
  34.   
  35.        lab3.setHorizontalAlignment(JLabel.RIGHT);// 设置文字显示在最右边  
  36.   
  37.        jp.add(lab1);  
  38.   
  39.        jp.add(lab3);  
  40.   
  41.        tab.pane.addTab("i",lab);  
  42.   
  43.     tab.pane.setTabComponentAt(tab.pane.indexOfComponent(lab),jp);//实现这个功能的就这一条最重要的语句  
  44.   
  45.        lab3.addMouseListener(this);  
  46.   
  47.     }  
  48.   
  49.     @Override  
  50.   
  51.     public void mouseClicked(MouseEvent arg0) {  
  52.   
  53.        // TODO Auto-generated method stub  
  54.   
  55.        tab.pane.remove(tab.pane.indexOfTabComponent(jp));  
  56.   
  57.     }  
  58.   
  59.     @Override  
  60.   
  61.     public void mouseEntered(MouseEvent e) {  
  62.   
  63.        // TODO Auto-generated method stub  
  64.   
  65.        lab3.setText("x ");  
  66.   
  67.     }  
  68.   
  69.     @Override  
  70.   
  71.     public void mouseExited(MouseEvent arg0) {  
  72.   
  73.        // TODO Auto-generated method stub  
  74.   
  75.        lab3.setText("");  
  76.   
  77.     }  
  78.   
  79.     @Override  
  80.   
  81.     public void mousePressed(MouseEvent arg0) {  
  82.   
  83.        // TODO Auto-generated method stub  
  84.   
  85.     }  
  86.   
  87.     @Override  
  88.   
  89.     public void mouseReleased(MouseEvent arg0) {  
  90.   
  91.        // TODO Auto-generated method stub  
  92.   
  93.     }  
  94.   
  95. }  
  96.   
  97.    


主方法类调用这个类:

 

 

[plain]  view plain copy
  1. import java.awt.event.*;  
  2.   
  3. import javax.swing.*;  
  4.   
  5.    
  6.   
  7. public class tab extends JFrame implements ActionListener{  
  8.   
  9.     JMenuItem mi;  
  10.   
  11. staticJTabbedPane pane;  
  12.   
  13. public tab()  
  14.   
  15. {  
  16.   
  17. super("选项卡窗格");  
  18.   
  19. setVisible(true);  
  20.   
  21. setSize(800,600);  
  22.   
  23. setLocationRelativeTo(null);  
  24.   
  25. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  26.   
  27.    
  28.   
  29. mi=new JMenuItem("增加");  
  30.   
  31. JMenu menu=new JMenu("增加");  
  32.   
  33. menu.add(mi);  
  34.   
  35. JMenuBar bar=new JMenuBar();  
  36.   
  37. bar.add(menu);  
  38.   
  39. setJMenuBar(bar);  
  40.   
  41. pane = new JTabbedPane();  
  42.   
  43. add(pane);  
  44.   
  45. new addTab();  
  46.   
  47. mi.addActionListener(this);  
  48.   
  49. }  
  50.   
  51. public static void main(String[] args) throws Exception  
  52.   
  53. {  
  54.   
  55. new tab();  
  56. }  
  57.   
  58. @Override  
  59.   
  60. public void actionPerformed(ActionEvent e) {  
  61.   
  62.     // TODO Auto-generated method stub  
  63.   
  64.     if(e.getSource()==mi){  
  65.   
  66.        new addTab();  
  67.   
  68.     }  
  69.   
  70. }  
  71.   
  72. }  


 

实现效果图:

 

当鼠标移动到第二个选项卡上,便显示出“X(没有截取到鼠标箭头)

 

关闭第二个选项卡:

 

 


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值