java中解决组件覆盖的问题!
有时候在移动组件的时候会出现两个组件覆盖的情况,但是你想让被覆盖的组件显示出来或者不被覆盖!
在设计GUI时已经可以定义组件的叠放次序了(按摆放组件的先后顺序)。
真正麻烦的是响应哪个组件,这就要创建一个链表,把组件对象按顺序存起来,响应事件时扫描这个链表,按
链表中的先后顺序选择响应组件对象。
所以要想满足自己的需求,那么在添加组件的时候就要注意顺序就好了!
另外如果不想用上面的方法,那么你就采用JLayeredPane这个类,分层面板可以帮助你解决覆盖中的问题!
例如moveToFront(Componet), moveToBack(Component), setPosition(), setLayer()。。。。
import java.awt.Button;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JLayeredPane;
//实现鼠标移动组件的小程序 public class ParentAndChild {
static Point oldPt;
static JLayeredPane pane = new JLayeredPane();
static Button btn = new Button(), btn1 = new Button( "嘻嘻嘻" );
public static void main(String[] args) {
Frame fm = new Frame( "哈哈哈" );
fm.setVisible( true );
pane.setLayout( new FlowLayout());
fm.add(pane, "Center" );
btn.setLabel( "啦啦啦" );
btn.addMouseListener( new MouseAdapter() {
public void mousePressed(MouseEvent e) {
oldPt=e.getLocationOnScreen();
}
public void mouseReleased(MouseEvent e) {
pane.setPosition(btn, - 1 );
}
});
btn.addMouseMotionListener( new MouseMotionAdapter() {
public void mouseDragged(MouseEvent e) {
Point pt = e.getLocationOnScreen();
btn.setLocation( new Point(btn.getX() + pt.x-oldPt.x,
btn.getY() + pt.y-oldPt.y));
oldPt=pt;
}
});
btn.setPreferredSize( new Dimension( 200 , 100 ));
pane.add(btn);
pane.add(btn1);
fm.setSize( new Dimension( 600 , 800 ));
fm.addWindowListener( new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit( 0 );
}
});
}
} |
本文转自 小眼儿 博客园博客,原文链接:http://www.cnblogs.com/hujunzheng/p/3970583.html,如需转载请自行联系原作者