gpt4 book ai didi

java - 使用鼠标事件在 JPanel 中拖动 JLabel

转载 作者:行者123 更新时间:2023-12-04 06:20:44 24 4
gpt4 key购买 nike

我正在使用 MouseInputListener (MouseListener + MouseMotionListener) 在 JPanel 中拖放多个 JLabel。这是我所做工作的概述;

MouseClicked: check if there is any JLabel within the clicked area of JPanel; if yes, select it (paint it to a color,etc). If not, do nothing.

MouseDragged: If a JLabel is selected, setLocation of that JLabel using e.getX() and e.getY() of the event. If nothing is selected, do nothing.

MouseReleased: If a JLabel is selected, paint it back to its original color. Select nothing (maybe null). If not, do nothing.



这些都在JPanel中; JPanel 实现了 MouseInputListener。

所以这里的问题是:当 JLabel 的初始位置为 0,0 时,说我将它移动到 10,10。在释放鼠标并且没有选择任何内容后,当我单击 0,0 时,它选择了那个 JLabel;但是,如果我点击 10,10,它应该选择它,因为这是它的新位置。

现在我想这可能是因为我使用了错误的坐标;我听说 JPanel 中的坐标值是相对的,所以我每次都必须做减法(即最终初始坐标)才能得到正确的坐标。我做到了,但它也不起作用。另一种可能性可能是 Java 存储了所有历史 X 和 Y 坐标(这样每次我点击前一个坐标时,我都会选择那个对象),这纯粹是想象!

你有什么建议?

提前致谢。

最佳答案

将 MouseMotionListener 添加到每个标签,而不是将其添加到面板。然后您无需确定您是否点击了标签。

Component Mover用于一般实现。您需要对其进行自定义以支持着色要求。

编辑:

如果将监听器添加到面板,则坐标将始终相对于面板,而不是标签,因此我不确定问题是什么。如果要查找是否单击了某个组件,请使用 Container.getComponentAt(Point) 方法。

如果您需要更多帮助,请发布您的 SSCCE这说明了问题。

关于java - 使用鼠标事件在 JPanel 中拖动 JLabel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6604134/

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