Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在swing中拖动对象时,MouseMotionListener是在对象中还是在JPanel中?_Java_Swing_Events - Fatal编程技术网

Java 在swing中拖动对象时,MouseMotionListener是在对象中还是在JPanel中?

Java 在swing中拖动对象时,MouseMotionListener是在对象中还是在JPanel中?,java,swing,events,Java,Swing,Events,我正在读的这本教科书中有一个问题: 使用Swing时,必须执行以下哪项操作才能在应用程序窗口中拖动对象: A.在对象中具有鼠标标记的方法 B.在面板中添加鼠标侦听器 C.向对象添加MouseMotionListener D.将MouseMotionListener添加到面板中 我认为A是不正确的,因为mouseDragged可以从父对象继承。B是错误的,因为MouseListener不用于拖动鼠标。因为它是我们想要拖动的物体,我相信正确的答案是C,但我不能100%确定我之前的假设是正确的 Mou

我正在读的这本教科书中有一个问题:

使用Swing时,必须执行以下哪项操作才能在应用程序窗口中拖动对象:

A.在对象中具有鼠标标记的方法
B.在面板中添加鼠标侦听器
C.向对象添加MouseMotionListener
D.将MouseMotionListener添加到面板中

我认为A是不正确的,因为mouseDragged可以从父对象继承。B是错误的,因为MouseListener不用于拖动鼠标。因为它是我们想要拖动的物体,我相信正确的答案是C,但我不能100%确定我之前的假设是正确的


MouseMotionListener的Java API说“然后使用组件的addMouseMotionListener方法向组件注册从该类创建的侦听器对象。”那么这是否意味着该对象确实是添加MouseMotionListener的对象呢?

我想答案是

D.在面板中添加一个
MouseMotionListener

拖动某个对象时,该对象的坐标将在显示该对象的面板中发生变化。因此,通过将
MouseMotionListener
添加到面板中,可以使用if条件检查拖动的起点是否在对象的边界内,并编写处理拖动的正确代码


如果在对象本身中添加
MouseMotionListener
,它将无法跟踪超出对象边界的阻力。

找到答案的最佳方法:编写一些代码并测试它。至少我会这么做的,上面没有。使用传输API或鼠标标记识别器+1 HFOE和Mad@user2533249参见示例。也许(相关部分在屏幕截图开始的答案的底部)@MadProgrammer,必须承认我对dndapi的理解从来没有这么好。我“我只看到它用于将属性从一个组件移动/复制到另一个组件。如果这个问题是关于将组件移动到同一面板上的不同位置,您还会使用传输API吗?@camickr个人认为,我不喜欢传输API,而更喜欢使用较低级别的DnD API。我可能会倾向于使用DNDAPI,即使是用于本地化传输,因为它允许我将概念扩展到包括从其他父容器拖动组件,但需要归结到我试图实现的目标