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

这篇博客介绍了在Java GUI编程中如何处理组件覆盖的问题。通过调整组件的叠放次序或者使用JLayeredPane类,可以实现对组件显示的控制。JLayeredPane提供了一系列方法如moveToFront()和moveToBack(),帮助在覆盖情况下调整组件的前后位置,从而达到预期的显示效果。示例代码展示了如何在鼠标拖动时动态改变组件位置,同时避免组件覆盖。
摘要由CSDN通过智能技术生成

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

}

});

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值