首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swing:确定拖尾的包含对象

Swing:确定拖尾的包含对象
EN

Stack Overflow用户
提问于 2016-02-15 16:07:57
回答 1查看 72关注 0票数 0

我想知道swing MouseMotionEvent (或MouseReleased)以哪个对象结尾。问题是,MousePressed和MouseReleased事件都会转到"press“下的对象,而不是发布的对象。

这里有一个人为的例子,可以更好地解释:

用户看到一个屏幕上有一些球和一些篮子,并被告知将一个球拖到一个篮子。每个球代表应用程序空间中的某个实体,每个篮表示应用程序空间中要采取的一些操作。从Swing的角度来看,球和篮子分别实现为高度覆盖的JButtons。在mousePressed上,球将其身份存储在一个已知的地方。我希望mouseReleased被篮子中的一个MouseListener捕获,它检查已知位置的球的标识,然后进入程序逻辑,执行由该篮表示的任务。

但据我所知,Swing (实际上是AWT)将mouseReleased事件传递给包含mousePressed事件(即球)的组件。除了看X和Y(这似乎是一个残酷的传说)之外,我如何知道mouseReleased发生在哪个篮子里呢?(如果mouseRelease发生在任何篮子之外,我需要采取某种默认的重置操作。而不是由底层mouseEvent中的JPanel处理程序完成)。

(请不要告诉我这是一个糟糕的界面。我给出的例子不是真的。它以一种我认为易于想象和理解的方式抽象出我的问题。)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-15 16:55:59

如果mouseRelease发生在任何篮子之外,我需要采取某种默认的重置动作-

使用拖落 API,那么您将只能在支持drop的组件上放置。

除了看X和Y(这似乎是一个残酷的传说)

为什么?这个事件没有信息,所以你需要以某种方式得到它。因此,如果您不想使用DnD API,那么您需要自己动手。

API中有一些方法可以帮助您这样做:

代码语言:javascript
复制
Window window = SwingUtilities.windowForComponent( e.getComponent() );
Point dropPoint = SwingUtilities.convertPoint(e.getComponent(), e.getPoint(), window);
Component dropComponent = SwingUtilities.getDeepestComponentAt(window, dropPoint.x, dropPoint.y);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35413907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档