让我解释一下我的代码的作用:我创建了自己的类,该类扩展了JDialog。此类称为类A,其中包含:JMenuBar,JMenu,JMenuItem,JButton,JDialog,JPanel和MouseAdapter。我的项目与FreeCell Game非常相似,在该项目中,我目前正在尝试移动位于其自己的JPanels中的多个图像。现在,我的问题是这样的:当用户单击屏幕上的某物时,我得到了他们单击位置的坐标,并设置了一个像
Component component = getComponentAt(point);
然后,我检查它是否是JPanel的实例,即卡
if (component instanceof JPanel)
这样我就可以移动卡了。这就是我的问题所在。当我打印出我的组件类是什么时,它声明它是一个JRootPane,但是直到我直到现在才对它一生都从未使用过或看到它。我想知道为什么我的组件从未使用过时才成为JRootPane的对象。
无论我在屏幕上的什么位置单击,它始终表明我的组件是JRootPane ...
是因为JRootPane包含JDialog吗?https://docs.oracle.com/javase/7/docs/api/javax/swing/JRootPane.html
是因为JRootPane包含JDialog吗?
没有JRootPane不包含JDialog。一个JDialog包含一个JRootPanel。
我想知道为什么我的组件从未使用过时才成为JRootPane的对象。
Component component = getComponentAt(point);
那么,容器getComponentAt(...)
指的是什么?是对话框还是面板?
在您的情况下,getComonentAt()
方法似乎是相对于对话框的,因此将返回相对于对话框的组件。由于添加到对话框的第一个组件是JRootPane,因此它将返回根窗格。
您要做的是将MouseListener添加到包含图像的面板中。然后在MouseListener代码中执行以下操作:
@Override
public void mousePressed(MouseEvent e)
{
Component parent = e.getComponent();
Component child = parent.getComponentAt(...);
}
然后,如果您单击包含图像的组件,您将获得该组件。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句