最近在做项目的时候需要处理点击一个JLabel实现删除这一个JLabel的功能。最近折磨了一点时间,查了一下API。找到2个方法可以实现这个功能。
remove
public void remove(Component comp)
- 从该容器中移除指定组件。如果
comp
不是rootPane
,则将调用转发到contentPane
。如果comp
不是JFrame
或contentPane
的子级,则不执行任何操作。
repaint
public void repaint(long time, int x, int y, int width, int height)
- 在
time
毫秒内重绘此组件的指定矩形区域。 - 实现这一功能的代码如下:
-
1 package qq.client.tools; 2 import java.awt.Frame; 3 import java.awt.event.MouseEvent; 4 import java.awt.event.MouseListener; 5 import javax.swing.JLabel; 6 /** 7 * 实现点击一个JLabel删除一个JLabel的小功能 8 * @author Administrator 9 * 10 */ 11 public class Test { 12 13 public static void main(String[] args) { 14 15 final Frame frame = new Frame();//创建窗口 16 frame.setSize(800, 600); 17 frame.setLayout(null); 18 19 JLabel btn = null;//监听 20 JLabel b=null; 21 btn = new JLabel("btn");//创建btn,加入监听 22 btn.addMouseListener(new MouseListener() { 23 @Override 24 public void mouseReleased(MouseEvent e) { 25 // TODO Auto-generated method stub 26 27 } 28 29 @Override 30 public void mousePressed(MouseEvent e) { 31 // TODO Auto-generated method stub 32 33 } 34 35 @Override 36 public void mouseExited(MouseEvent e) { 37 // TODO Auto-generated method stub 38 39 } 40 41 @Override 42 public void mouseEntered(MouseEvent e) { 43 // TODO Auto-generated method stub 44 45 } 46 47 @Override 48 public void mouseClicked(MouseEvent e) { 49 // TODO Auto-generated method stub 50 if(e.getClickCount()==1){//点击事情 51 JLabel sourceBtn = (JLabel)e.getSource();//获取事件源对象(点击的btn) 52 frame.remove(sourceBtn); 53 frame.repaint(); 54 } 55 } 56 }); 57 frame.add(btn); 58 btn.setBounds(50, 50, 50, 50); 59 frame.setVisible(true); 60 } 61 }
整个功能就实现了。注意不加 frame.repaint();这句代码,会不能及时刷新。需要你最小化一下窗口或者最大化一下(我觉得可能是刷新需要用户操作才会刷新)窗口才能自动刷新。加了 frame.repaint();就会及时刷新。