最近在做項目的時候需要處理點擊一個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();就會及時刷新。