gpt4 book ai didi

java - 我如何知道鼠标单击是否在面板中的自定义组件上完成?

转载 作者:行者123 更新时间:2023-12-01 12:25:51 25 4
gpt4 key购买 nike

我有一个 JPanel 和一些自定义组件。框架中有很多这样的面板。我需要知道鼠标单击是否在自定义组件上(例如 JLabel)......我编写了以下代码来实现此目的:

public object getxxx(MouseEvent pEvent)
{
Point localPoint = SwingUtilities.convertPoint(pEvent.getComponent(), pEvent.getPoint(), aPanel );
if (SwingUtilities.getLocalBounds(aPanel).contains(localPoint)) // This is where im facing problem, its always false in never goes in…
{
///if clicked on the aPanel then do something
}
}

即使我点击所需的面板,if 条件始终为 false

最佳答案

尚不清楚您已经拥有什么以及还需要做什么,但这似乎满足了您的需求:

public class MyFrame extends JFrame {

JPanel panel = new JPanel();

MyFrame() {

JLabel l1 = new JLabel("111");
l1.setName("111");
l1.setOpaque(true);
l1.setBackground(Color.MAGENTA);

JLabel l2 = new JLabel("222");
l2.setName("222");
l2.setOpaque(true);
l2.setBackground(Color.CYAN);

JLabel l3 = new JLabel("333");
l3.setName("333");
l3.setOpaque(true);
l3.setBackground(Color.YELLOW);

panel.add(l1);
panel.add(l2);
panel.add(l3);
panel.addMouseListener(new MyMouseListener());
panel.setName("panel");

getContentPane().add(panel);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
pack();
setVisible(true);
}

class MyMouseListener extends MouseAdapter {

@Override
public void mouseClicked(MouseEvent e) {

if (e.getButton() == MouseEvent.BUTTON3) { // BUTTON3 = right button
Component c = panel.getComponentAt(e.getPoint()); // compare with panel.findComponentAt
System.out.println("Open context menu for " + c.getName());
}
}
}

public static void main(String[] args) {

new MyFrame();
}
}

说明:

  • 我创建了 3 个 JLabel,为它们提供了背景颜色以可视化屏幕上组件的区域以及用于识别的名称。您将在此处使用您自己的组件。
  • 包含标签的 JPanel 注册 MouseListener,用于检查右键单击。如果是,它会在面板内查找生成事件的组件1。然后您可以在那里打开上下文菜单。

1 最初,我有自己的方法在事件位置获取组件,但事实证明 answer by camickr 更短。 (+1)

关于java - 我如何知道鼠标单击是否在面板中的自定义组件上完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26340553/

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