Java Swing FlowLayout Alignments - PullRequest
       19

Java Swing FlowLayout Alignments

5 голосов
/ 04 марта 2012

Я довольно новичок в Java и пытаюсь создать приложение с графическим интерфейсом с некоторыми ярлыками, кнопками и текстовыми полями. Программа довольно проста, и я просто хотел использовать макет по умолчанию, который является FlowLayout. Мне удалось все расставить и по размеру все нормально, но, похоже, не работает только выравнивание. Я хочу разместить кнопки и текстовые поля с определенным выравниванием, но всякий раз, когда я устанавливаю выравнивание, он перемещает текст внутри любого объекта, а не самого объекта. Например, я написал:

 button.setHorizontalAlignment(JButton.RIGHT);

но похоже, что он выравнивает текст внутри кнопки вместо самой кнопки. Есть ли способ выровнять саму кнопку, а не текст внутри нее?

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

Спасибо заранее.

Ответы [ 3 ]

13 голосов
/ 04 марта 2012

См. Конструктор FlowLayout(int align).

Создает новый FlowLayout с указанным выравниванием и 5-значным горизонтальным и вертикальным зазором по умолчанию. Значение аргумента выравнивания должно быть одним из FlowLayout.LEFT, FlowLayout.RIGHT, FlowLayout.CENTER, FlowLayout.LEADING или FlowLayout.TRAILING.

Похоже, вы после FlowLayout.RIGHT, как видно из этого ответа (поле со списком и флажок вверху).

image

2 голосов
/ 04 марта 2012

Я не думаю, что вы можете сделать это только с помощью FlowLayout.

Мои предложения будут:

  • Рассмотрите возможность переключения на MigLayout , который является гораздо более мощным механизмом разметки. MigLayout в основном позволяет вам размещать компоненты в гибкой сетке, и вы можете установить конкретное выравнивание компонента в каждой ячейке сетки.
  • Если вы хотите выровнять подкомпоненты, также часто имеет смысл помещать их во вложенную JPanel. Затем вы можете использовать отдельный макет для этой JPanel (возможно, BorderLayout?), Который позволит вам получить точное выравнивание, которое вы хотите.
2 голосов
/ 04 марта 2012

setHorizontalAlignment из AbstractButton устанавливает горизонтальное выравнивание значка и текста , а не положение кнопки. По умолчанию AbstractButton является SwingConstants.CENTER.

Если вы хотите выровнять кнопку ... установите положение при добавлении ее на панель или рамку ... как-то так ...

p.add(button, BorderLayout.SOUTH);//using `BorderLayout`

Макеты потока обычно используются для размещения кнопок на панели. Кнопки будут располагаться слева направо до тех пор, пока на одной строке больше не будет кнопок.

...