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

简介: java中解决组件覆盖的问题!     有时候在移动组件的时候会出现两个组件覆盖的情况,但是你想让被覆盖的组件显示出来或者不被覆盖!在设计GUI时已经可以定义组件的叠放次序了(按摆放组件的先后顺序)。 真正麻烦的是响应哪个组件,这就要创建一个链表,把组件对象按顺序存起来,响应事件时扫描这个链表,按 链表中的先后顺序选择响应组件对象。

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

}

  

 

目录
相关文章
|
3月前
|
Java
深入理解Java中的AbstractQueuedSynchronizer(AQS):并发编程的核心组件
深入理解Java中的AbstractQueuedSynchronizer(AQS):并发编程的核心组件
|
7月前
|
监控 安全 Java
【JavaWeb】 三大组件之过滤器 Filter
过滤器(Filter)是Java Web应用中的一种组件,它在请求到达Servlet或JSP之前或者响应送回客户端之前,对请求和响应进行预处理和后处理操作。通过使用过滤器,可以对请求进行过滤,拦截请求,修改请求参数,在请求被处理之前进行一些预处理操作;同时也可以对响应进行过滤,对响应内容进行修改,添加一些额外的处理。
|
1月前
|
Java 数据库 开发者
Java数组件与表格组件
Java数组件与表格组件
15 0
|
1月前
|
Java 容器
Java常用组件、容器与布局
Java常用组件、容器与布局
14 0
|
1月前
|
Java 开发者 容器
【Java】深入了解Spring容器的两个关键组件
【Java】深入了解Spring容器的两个关键组件
10 0
|
8月前
|
Java 应用服务中间件 数据安全/隐私保护
JavaWeb 三大组件之 过滤器 Filter
JavaWeb 三大组件之 过滤器 Filter
57 0
|
4月前
|
Java API Spring
spring的安装 -- IEDA-创建 Java 工程的jar包教程--以及spring5的核心组件
spring的安装 -- IEDA-创建 Java 工程的jar包教程--以及spring5的核心组件
52 0
spring的安装 -- IEDA-创建 Java 工程的jar包教程--以及spring5的核心组件
|
4月前
|
存储 缓存 监控
Java NIO三大核心组件
用户程序进行IO的读写,依赖于底层的IO读写,基本上会用到底层的read&write两大系统调用。在不同的操作系统中,IO读写的系统调用的名称可能完全不一样,但是基本功能是一样的。 read系统调用并不是直接从物理设备把数据读取到内存中,write系统调用也不是直接把数据写入到物理设备。上层应用无论是调用操作系统的read还是write,都会涉及缓冲区。**具体来说,调用操作系统的read,是把数据从内核缓冲区复制到进程缓冲区;而调用系统调用的write,是把数据从进程缓冲区复制到内核缓冲区。**因为外部设备的读写设计到操作系统的中断,引入缓冲区可以减少频繁地与设备之间的物理交换,操作系统会
|
6月前
|
算法 Java
SAP Java Connector 组件介绍
SAP Java Connector 组件介绍
49 0
|
7月前
|
缓存 应用服务中间件 数据库
【JavaWeb】 三大组件之监听器 Listener
在JavaWeb应用程序中,Listener(监听器)是一种机制,用于监听和响应特定的事件。它可以感知并响应与应用程序相关的事件,从而执行相应的逻辑处理。事件是在应用程序运行过程中发生的特定动作或状态改变。例如,Web应用程序的启动和关闭、请求的到达和完成、会话的创建和销毁等都被认为是事件。监听器会注册对这些事件的感兴趣,并在事件发生时调用相应的回调方法来执行预定的业务逻辑。