Возможно ли иметь «подвижные» / «перетаскиваемые» компоненты, такие как JButtons, JTextFields в JFrame? - PullRequest
6 голосов
/ 19 февраля 2011

В основном я планирую разместить некоторые кнопки, текстовые поля, метки и т. Д. На JFrame, и я хотел бы сделать возможным, чтобы пользователь мог перемещать различные компоненты на этом JFrame с помощью мыши.

Я видел различные способы с MouseListeners, подклассифицированным кодом JComponent, реализациями DropSource / DropTarget и т. Д., Но я не уверен, что это «рекомендуемый» способ (мне не нужно поддерживать «перетаскивание» между различными Frames / Applications - это то, что делает большинство примеров).

Ответы [ 2 ]

6 голосов
/ 19 февраля 2011

Компонент может сделать это за вас.

3 голосов
/ 19 февраля 2011

Используйте GlassPane: http://download.oracle.com/javase/tutorial/uiswing/components/rootpane.html

Это невидимая панель, которая находится поверх всех других компонентов. Вы можете подключить к нему прослушиватели мыши, а затем использовать SwingUtilities.getDeepestComponentAt (), чтобы выяснить, какой компонент был нажат под GlassPane. Затем используйте слушатель mouseDragged на стеклянной панели и установите расположение компонента на основе события перетаскивания мышью.

Вам нужно будет установить макет вашего контейнера на «ноль», чтобы компонент setLocation работал.

...