• 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);
    				}
    		});
    	}
    
    }
    

      

  • 相关阅读:
    MiniUI表单验证实践
    MiniUI官方表单验证示例
    MiniUI表单验证总结
    Js-事件分发与DOM事件流
    Windows远程桌面连接的利器-mRemote
    Git 以分支的方式同时管理多个项目
    GIT 如何合并另一个远程Git仓库的文件到本地仓库里某个指定子文件夹并不丢失远程提交记录?
    如何导入另一个 Git库到现有的Git库并保留提交记录
    Total Commander如何设置自定义快捷键在当前目录打开ConEmu
    PHP ECSHOP中 诡异的问题:expects parameter 1 to be double
  • 原文地址:https://www.cnblogs.com/hujunzheng/p/3970583.html
Copyright © 2020-2023  润新知