Как расположить панель в верхней части диалогового окна так, чтобы на ней было две кнопки? - PullRequest
4 голосов
/ 29 июня 2009

Мне нужно расположить панель в верхней части диалогового окна так, чтобы на ней было две кнопки («Сохранить» и «Отмена»).

Я хочу, чтобы сохранение было слева, а Отмена - справа.

Я создал JPanel с помощью MigLayout и пристыковал его к северу от панели содержимого, и я никак не могу понять, как добавить к нему две кнопки, чтобы они выглядели так, как я хочу , Стыковка их внутри панели, кажется, избавляет от всех отступов в диалоге (что выглядит ужасно).

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

12 голосов
/ 30 июня 2009

Кроме того, вы, вероятно, не должны диктовать, какая кнопка слева или справа. Это один из отличных способов использования MiGLayout (независимость от платформы, даже в том, что касается кнопки отмены).

p.add(cancelButton, "tag cancel");
p.add(okButton, "tag ok");

Теперь кнопки будут отображаться в правильном порядке в зависимости от платформы.

Вот статья с кодом, делающим то, что вы собираетесь. Я настоятельно рекомендую избегать попыток изменить размер компонентов, таких как кнопки (они действительно должны исходить из внешнего вида платформы). Кроме того, стыковка хороша, если в этом есть смысл, но я редко нахожу это необходимым. Вместо того чтобы создавать полностью отдельную панель для кнопок, просто разбейте строку, в которой находятся кнопки, - гораздо чище, и вы не получите все вложенные панели.

Трудно отойти от техники размещения границ на вложенных панелях, но как только вы освоите ее, MigLayout станет мечтой. Кстати, я понимаю, что бывают случаи, когда вам может понадобиться создать панель кнопок в библиотеке - в этом случае отдельные панели могут иметь смысл (хотя вы можете также добавить в библиотеку строку кнопок на существующей панели, вместо возврата панели, которую вы затем добавляете в макет).

2 голосов
/ 29 июня 2009

Дох, всегда происходит, как только вы задаете вопрос, выскакивает ответ:

JPanel buttonPanel = new JPanel(new MigLayout("fill","[50][50]",""));
buttonPanel.add(saveChangesButton);
buttonPanel.add(cancelButton, "align right");
getContentPane().add(buttonPanel, "dock north");

Обратите внимание, что на панели содержимого также используется MigLayout.

...