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

}

  

时间: 2024-08-03 18:37:53

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

Java中解决继承和接口默认方法冲突

1)超类优先.如果超类提供了一个具体方法,同名而且有相同参数类型发默认方法会被忽略. 2)接口冲突.如果一个超接口提供了一个默认方法,另一个接口提供了一个同名而且参数类型(不论是否是默认参数)相同的方法,必须覆盖这个方法来解决冲突. 下面来看第二个规则.考虑另一个包含getName方法的接口: interface Named { default String getName(){ return getClass().getName() + "_" + hashCode():} } 如果

java中commons-beanutils的介绍

1.   概述 commons-beanutil开源库是apache组织的一个基础的开源库,为apache中许多类提供工具方法,学习它是学习其他开源库实现的基础. Commons-beanutil中包含大量和JavaBean操作有关的工具方法,使用它可以轻松利用Java反射机制来完成代码中所需要的功能,而不需要详细研究反射的原理和使用,同时,该类库中提出了动态Bean的概念,不但提供现有JavaBean的所有功能,而且还可以在运行时动态的对Bean中的属性数据类型进行修改以及增删属性. 本文研究

Java中的Exception

1异常相关概述 1.1 什么是异常 异常就是Java程序在运行过程中出现的错误. 前面接触过的空指针,数组越界,类型转换错误异常等 1.2 Throwable Throwable 类是 Java 语言中所有错误或异常的超类. 只有当对象是此类(或其子类之一)的实例时,才能通过 JVM 或者 throw 语句抛出. 1.3异常的继承体系 -Throwable -Error -Exception -RuntimeException 1.4 JVM默认是如何处理异常的? jvm有一个默认的异常处理机制

Java 中的 syncronized 你真的用对了吗

生活中随处可见并行的例子,并行 顾名思义就是一起进行的意思,同样的程序在某些时候也需要并行来提高效率,在上一篇文章中我们了解了 Java 语言对缓存导致的可见性问题.编译优化导致的顺序性问题的解决方法,下面我们就来看看 Java 中解决因线程切换导致的原子性问题的解决方案 -- 锁 . 说到锁我们并不陌生,日常工作中也可能经常会用到,但是我们不能只停留在用的层面上,为什么要加锁,不加锁行不行,不行的话会导致哪些问题,这些都是在使用加锁语句时我们需要考虑的. 来看一个使用 32 位的 CPU 写

Java中的构造函数和重载

一.Java中的构造函数 构造函数是对象被创建时初始化对象的成员方法,它具有和它所在的类完全一样的名字.构造函数只能有入口参数,没有返回类型,因为一个类的构造方法的返回类就是类本身.构造函数定义后,创建对象时就会自动调用它,对新创建的对象分配内存空间和初始化.在 Java 中,构造函数也可以重载,当创建一个对象时, JVM 会自动根据当前对方法的调用形式在类的定义中匹配形式符合的构造方法,匹配成功后执行该构造方法. eg: public Class Dog { private int age:

Java中的注解的详解

详解Java中的注解 在Java中,注解(Annotation)引入始于Java5,用来描述Java代码的元信息,通常情况下注解不会直接影响代码的执行,尽管有些注解可以用来做到影响代码执行. 注解可以做什么 Java中的注解通常扮演以下角色: 编译器指令 构建时指令 运行时指令 l Java内置了三种编译器指令,本文后面部分会重点介绍 l Java注解可以应用在构建时,即当你构建你的项目时.构建过程包括生成源码,编译源码,生成xml文件,打包编译的源码和文件到JAR包等.软件的构建通常使用诸如A

java配置ueditor中解决“未找到上传文件”错误提示

ueditor是一个功能十分强大的在线文本编辑器,但是在ssh框架中,确切的说实在struts2中由于其拦截器需要对request,session对象进行重新封装,这个过程中会把request对象中保存的一些内容清空,所以会导致ueditor的上传功能获取不到需要上传的内容导致“未找到上传文件”的错误! 参考网上资料和自己实验,最终的解决思路是,重写struts2中的一个转换的类,然后配置struts2使用我们重写的这个类.由于我们的工程中可能会有其他的上传等功能,为了不影响其他功能的时候,还需

浅谈利用同步机制解决Java中的线程安全问题

我们知道大多数程序都不会是单线程程序,单线程程序的功能非常有限,我们假设一下所有的程序都是单线程程序,那么会带来怎样的结果呢?假如淘宝是单线程程序,一直都只能一个一个用户去访问,你要在网上买东西还得等着前面千百万人挑选购买,最后心仪的商品下架或者售空......假如饿了吗是单线程程序,那么一个用户得等前面全国千万个用户点完之后才能进行点餐,那饿了吗就该倒闭了不是吗?以上两个简单的例子,就说明一个程序能进行多线程并发访问的重要性,今天就让我们去了解一下Java中多线程并发访问这个方向吧. **第一

Java中关于乱码的认识和解决办法

前几天在使用中兴的MM7接口开发一个彩信的应用,可是在测试的时候,手机收到的文本内容总是一堆乱码,不管怎么修改参数问题都得不到解决,于是就狠狠的琢磨和研究了下关于编码的内容,最终成功解决了乱码的问题. 我们都知道Java语言使用的是Unicode编码.可是大家是否真的已经理解了这句话的含义? Unicode编码和我们常用的UTF-8,GBK有什么关系呢? 那接下来就来讨论下这个话题. 不知大家还有没想过,我们在Java代码里面定义一个字符串字面量的时候,该字符串在JVM中的编码是什么?  是的,