我想知道swing MouseMotionEvent (或MouseReleased)以哪个对象结尾。问题是,MousePressed和MouseReleased事件都会转到"press“下的对象,而不是发布的对象。
这里有一个人为的例子,可以更好地解释:
用户看到一个屏幕上有一些球和一些篮子,并被告知将一个球拖到一个篮子。每个球代表应用程序空间中的某个实体,每个篮表示应用程序空间中要采取的一些操作。从Swing的角度来看,球和篮子分别实现为高度覆盖的JButtons。在mousePressed上,球将其身份存储在一个已知的地方。我希望mouseReleased被篮子中的一个MouseListener捕获,它检查已知位置的球的标识,然后进入程序逻辑,执行由该篮表示的任务。
但据我所知,Swing (实际上是AWT)将mouseReleased事件传递给包含mousePressed事件(即球)的组件。除了看X和Y(这似乎是一个残酷的传说)之外,我如何知道mouseReleased发生在哪个篮子里呢?(如果mouseRelease发生在任何篮子之外,我需要采取某种默认的重置操作。而不是由底层mouseEvent中的JPanel处理程序完成)。
(请不要告诉我这是一个糟糕的界面。我给出的例子不是真的。它以一种我认为易于想象和理解的方式抽象出我的问题。)
发布于 2016-02-15 16:55:59
如果mouseRelease发生在任何篮子之外,我需要采取某种默认的重置动作-
使用拖落 API,那么您将只能在支持drop的组件上放置。
除了看X和Y(这似乎是一个残酷的传说)
为什么?这个事件没有信息,所以你需要以某种方式得到它。因此,如果您不想使用DnD API,那么您需要自己动手。
API中有一些方法可以帮助您这样做:
Window window = SwingUtilities.windowForComponent( e.getComponent() );
Point dropPoint = SwingUtilities.convertPoint(e.getComponent(), e.getPoint(), window);
Component dropComponent = SwingUtilities.getDeepestComponentAt(window, dropPoint.x, dropPoint.y);https://stackoverflow.com/questions/35413907
复制相似问题