java中解决组件重叠的问题(例如鼠标移动组件时)

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,如需转载请自行联系原作者
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值