在JFrame中是否可以有可“移动”/“拖动”的组件,例如JButtons、JTextFields?

6

基本上,我计划在JFrame上放置一些按钮、文本框、标签等组件,并希望用户可以使用鼠标将不同的组件移动到JFrame上。

我已经看到了各种方法,包括使用MouseListeners、子类化JComponent代码、DropSource/DropTarget实现等等,但我不确定哪种方法是“推荐”的(我不需要支持在不同的Frames/Applications之间进行“拖放”,这是大多数示例所做的事情)。

2个回答

6
组件移动器可以帮助您实现这一点。 点击这里 了解更多信息。

这太棒了,@camickr。我希望我能为此付费。 :) 唯一的问题不在于您的代码,而是这种解决方案似乎会引起多个其他功能需求,例如手动组件调整大小和结构化(“捕捉到”)组件放置。 - ryvantage

3
使用GlassPane: http://download.oracle.com/javase/tutorial/uiswing/components/rootpane.html 它是一个不可见的面板,位于所有其他组件的顶部。您可以将鼠标监听器附加到它上面,然后使用SwingUtilities.getDeepestComponentAt()来确定在GlassPane下单击了哪个组件。然后,在glasspane上使用mouseDragged监听器,并根据鼠标拖动事件设置组件位置。
您需要将容器的布局设置为“null”,以便组件的setLocation函数能够正常工作。

我可以成为第一个欢迎PlutoTheCat stackoverflow.com的人吗?你好,谢谢你的好建议! - Hovercraft Full Of Eels
谢谢您的回答!除了将单个组件移动到其他位置外,是否也可以移动由JLabel和JTextField组成的组件? - soc
这是可能的...为什么不试一试呢? - Hovercraft Full Of Eels

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接