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,如需转载请自行联系原作者