最近在做项目的时候需要处理点击一个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
毫秒内重绘此组件的指定矩形区域。 - 实现这一功能的代码如下:
-
package qq.client.tools;
import java.awt.Frame;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JLabel;
/**
* 实现点击一个JLabel删除一个JLabel的小功能
* @author Administrator
*
*/
public class Test { public static void main(String[] args) { final Frame frame = new Frame();//创建窗口
frame.setSize(800, 600);
frame.setLayout(null); JLabel btn = null;//监听
JLabel b=null;
btn = new JLabel("btn");//创建btn,加入监听
btn.addMouseListener(new MouseListener() {
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub } @Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub } @Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub } @Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub } @Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
if(e.getClickCount()==1){//点击事情
JLabel sourceBtn = (JLabel)e.getSource();//获取事件源对象(点击的btn)
frame.remove(sourceBtn);
frame.repaint();
}
}
});
frame.add(btn);
btn.setBounds(50, 50, 50, 50);
frame.setVisible(true);
}
}整个功能就实现了。注意不加 frame.repaint();这句代码,会不能及时刷新。需要你最小化一下窗口或者最大化一下(我觉得可能是刷新需要用户操作才会刷新)窗口才能自动刷新。加了 frame.repaint();就会及时刷新。