是否可以在JFrame中使用JButton,JTextField等“可移动”/“可拖动”组件?

基本上我计划在JFrame上放置一些按钮,文本字段,标签等,我希望用户可以用鼠标在该JFrame上移动不同的组件。

我已经看到了使用MouseListeners,子类化JComponent代码,DropSource / DropTarget实现等的各种方法,但我不确定哪种是“推荐”方式(我不需要支持不同帧/应用程序之间的“拖放”)这是大多数例子似乎做的事情)。

Component Mover可以为您完成此操作。

使用GlassPane: http : //download.oracle.com/javase/tutorial/uiswing/components/rootpane.html

它是一个隐藏在所有其他组件之上的隐形面板。 您可以将鼠标侦听器附加到它,然后使用SwingUtilities.getDeepestComponentAt()来确定在GlassPane下面单击了哪个组件。 然后在glasspane上使用mouseDragged侦听器,并根据鼠标拖动事件设置组件位置。

您需要将容器的布局设置为“null”,以便组件的setLocation可以工作。