gpt4 book ai didi

java - Swing - 在 mouseReleased 下获取新组件

转载 作者:行者123 更新时间:2023-11-30 07:24:29 27 4
gpt4 key购买 nike

这个问题可能掩盖了潜在的 Swing 知识的缺乏,但我似乎无法确定我做错了什么。本质上,我想检测一个组件中的 mousePressed,然后在释放鼠标时接收鼠标下方的任何组件的 mouseReleased,而不是原始组件。

import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.event.MouseInputAdapter;
import net.miginfocom.swing.MigLayout;

public class TestMouseListener extends MouseInputAdapter {

public void mouseEntered(MouseEvent arg0) {System.out.println("Entered " + arg0.getComponent());}
public void mouseExited(MouseEvent arg0) {System.out.println("Exited " + arg0.getComponent());}
public void mousePressed(MouseEvent arg0) {System.out.println("Pressed " + arg0.getComponent());}
public void mouseReleased(MouseEvent arg0) {System.out.println("Released " + arg0.getComponent());}

public static void main(String[] args){
JFrame frame = new JFrame();
frame.setLayout(new MigLayout());
frame.setSize(400, 400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
TestPanel panel1 = new TestPanel("Panel 1");
TestPanel panel2 = new TestPanel("Panel 2");
panel1.add(new JLabel("Text1"));
panel2.add(new JLabel("Text2"));
frame.add(panel1);
frame.add(panel2);
TestMouseListener listener = new TestMouseListener();
panel1.addMouseListener(listener);
panel1.addMouseMotionListener(listener);
panel2.addMouseListener(listener);
panel2.addMouseMotionListener(listener);
frame.setVisible(true);
}
}
class TestPanel extends JPanel {
String name;
TestPanel(String name){ this.name = name; }
public String toString(){ return name; }
}

因此,当我将鼠标悬停在面板 1 上时,单击,拖动到面板 2,松开,我得到以下信息:

Entered Panel 1
Pressed Panel 1
Exited Panel 1
Entered Panel 2
Released Panel 1

如何获取我发布的面板?我希望 mouseReleased 事件会为面板 2 触发,但显然它不会。

最佳答案

存储一个包含您最近输入的组件的变量。每次触发 MouseEntered 事件时都继续覆盖它。然后有一个方法,这样当你释放鼠标按钮时,你可以使用你最近输入的任何组件。

Component lastEntered;

private void MouseEntered(MouseEvent e) {
lastEntered = e.getComponent;
}

关于java - Swing - 在 mouseReleased 下获取新组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11476454/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com