问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java中swing的问题,关于按钮下面也有按钮时候事件的触发

发布网友 发布时间:2022-05-16 01:46

我来回答

4个回答

热心网友 时间:2023-10-08 20:37

按钮是我用label模仿的,button上添加事件后没法触发底层的鼠标事件,不知道如何解决,下面是我实现的代码,拖动的动画效果还没想出好的办法, 里面有获取屏幕高宽的方法,可以实现panel居中,button相对于屏幕坐标的方法是在事件里调用e.getXOnScreen();e.getYOnScreen()这两个方法:
public class Test {

public static void main(String[] args)
{
new Test().new MyFrame();
}

class MyFrame extends JFrame{
JLabel testBtn = new JLabel("test:");
int x;//x坐标
int y;//y坐标

public MyFrame(){

Dimension ss = Toolkit.getDefaultToolkit().getScreenSize();//获取屏幕大小
//获取内边距
Insets screenInsets = Toolkit.getDefaultToolkit().getScreenInsets(this.getGraphicsConfiguration());
int taskBarHeight = screenInsets.bottom; //获取底部 菜单栏高度
setBounds(ss.width/10, (ss.height-taskBarHeight)/10, ss.width/5*4, (ss.height-taskBarHeight)/5*4);
setLayout(null);
testBtn.setBounds(0, 0, 150, 30);
testBtn.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));

addMouseListener(new MouseAdapter() {
boolean flag = false;
int xMax;
int xMin;
int yMax;
int yMin;
@Override
public void mousePressed(MouseEvent e) {
System.out.println("x="+e.getX()+";y="+e.getY());

xMax = testBtn.getX()+testBtn.getWidth();
xMin = testBtn.getX();
//这里加了个30是标题栏的高度,如果有目录栏,还需要加
yMax = testBtn.getY()+testBtn.getHeight()+30;
yMin = testBtn.getY();
//鼠标点下位置为按钮部分
System.out.println(e.getX()+";"+e.getY());
System.out.println(xMin+";"+xMin);
System.out.println(yMin+";"+yMin);
System.out.println(e.getX()>xMin&&e.getX()<xMax&&e.getY()<yMax&&e.getY()>yMin);
if(e.getX()>xMin&&e.getX()<xMax&&e.getY()<yMax&&e.getY()>yMin){
flag =true;
testBtn.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
testBtn.setLocation(e.getX()-testBtn.getWidth()/2, e.getY()-30-testBtn.getHeight()/2);
}else{
flag =false;
}
}
@Override
public void mouseReleased(MouseEvent e) {
if(flag ==true){
testBtn.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
testBtn.setLocation(e.getX()-testBtn.getWidth()/2, e.getY()-30-testBtn.getHeight()/2);
}
}
});

add(testBtn);
setVisible(true);
}
}

}

热心网友 时间:2023-10-08 20:37

初步看起来是你把简单问题给复杂化了,:)

既然是拖动鼠标,那么是否是按drag和drop来处理。如果是那就走Swing的DnD处理(不过看你的意思不象)。

如果不是,那么把鼠标事件放到面板上是不是更好,然后让鼠标穿透过一个自定义控件(基于JComponet,参考JButton等来定制),然后根据鼠标的位置和控件的位置来看鼠标在哪个控件中。

下面是一个自定义控件的例子:

class MyComponent extends JComponent implements Graph {
  private String text;
  public MyComponent(String text) {
  this.text = text;
 }
 @Override
 public void paint(Graphics g) {
  g.setColor(Color.green);
  g.fillRect(0, 0, getWidth(), getHeight());
  g.setColor(Color.white);
  FontMetrics fm = g.getFontMetrics();
  Rectangle bounds = fm.getStringBounds(text, g).getBounds();
  g.drawString(text, (getWidth() - bounds.width) / 2, (getHeight() - bounds.height) / 2 + fm.getAscent() - fm.getDescent());
 }
}

this.getLocationOnScreen();// 获取屏幕坐标

热心网友 时间:2023-10-08 20:38

你可以讲移动方法写在需要拖拽的那个按钮事件里,然后当两个按钮重合的时候就触发移动的方法

getLocation()可以得到按钮的 x y 坐标

热心网友 时间:2023-10-08 20:38

拖拽事件和移动事件同时捕捉,,,,,,然后处理追问问题就是怎么同时捕捉。。一个按钮在上面执行拖拽事件,一个按钮在下面执行鼠标移动事件

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
找几本一流的小说。类型' 完结什么的无所谓. 不要幼稚就好 沈阳职高学校排名 沈阳哪个公办职高和中专好 沈阳有哪些职高学校比较好? gpw一代和二代的区别有哪些 罗技gpw一代和二代区别介绍 第一代和第二代的区别 gpw二代和一代有什么区别 二代和一代区别详情分享 设张举措的意思设张举措的解释设张举措接龙 设张的成语设张的成语是什么 人字地砖铺法怎么找平方 Java swing该怎么设置点击一个按钮时将其切换为红色,点击其他按钮时将其还原 【java】Swing 按钮点击后弹出窗口 java swing中如何设置按钮tab键顺序? JAVA. swing如何点击一个按钮,本窗口的界面变更?如登陆后又一个界面,有什么思路和简单实例? java,swing,按钮无法设置大小 请问怎么在swing中添加按钮和文本框,然后点击这个按钮后读取文本框里的内容并将自己和文本框删除? java swing 获取按钮信息 在java swing中如何实现通过代码按下一个按钮? Java Swing 按钮 键盘快捷键 铝圈抛网为什么抓不到鱼 怎么使用手抛网,撒鱼用的 头发多的直发怎样扎好看 自己可以扎的简单直头发扎法 直发如何扎马尾 直发扎好看马尾图解 直发扎马尾的方法 自己怎样扎头发好看 长直发马尾怎么扎好看的方法及步骤 奥玲车子装空调原装的跟自己装有什么区别? 直发的马尾怎样扎才好看? 日产轩逸换原厂空调蒸发箱保修多久? 直发怎么扎马尾好看又简单 汽车原装空调能改电空调吗? 关于java swing的按钮点击事件,请教大侠们 java swing 按钮按下后继续返回文本框中的数据 java swing 按钮不显示 JDC数字货币好吗 E5-2698 V4与E5-2687W V4哪个运行速度更快 iap15w413as单片机怎样烧录程序? 求助关于iap15w413as单片机的数据手册 iap15w413as iap功能提问 如何给单片机IAP 15W413AS,烧写程序?需要哪些工具?目前有完整的程序,求烧写方法。 谁知道单片机IAP15W205S-35I的功率是多少? 亲 这是给您补发的单号 韵达快递1201900651556看看到哪里了 怎么准确判断高压电塔的电压值??? 已发货了亲,韵达快递单号为:6000089083570韵达到哪里了? 高压电塔有几万伏电? 食用醋对金属有腐蚀作用吗 电视上能下载极品飞车20吗? 极品飞车去哪下载? 极品飞车,在哪下载啊!! 谁知道极品飞车在哪下载要能玩的?下了几个玩不成 为什么极品飞车20下载不了