2012-03-04 4 views
5

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

button.setHorizontalAlignment(JButton.RIGHT); 

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

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

Заранее спасибо.

+2

+1 хороший вопрос, для свинга лучше всего задать вопросы с [SSCCE] (http://sscce.org/) – mKorbel

ответ

13

Просмотреть конструктор FlowLayout(int align).

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

Кажется, вы после FlowLayout.RIGHT, как показано в this answer (комбо и установите флажок в верхней части).

+0

ДА, это сработало. Я, очевидно, должен использовать другие типы макетов, чтобы получить лучшее выравнивание, но это работает очень хорошо. Благодарю. – Dennis

+1

Тогда я бы пошел на вложенный макет, как показано выше. Хотя единственное выравнивание в этом, кроме макета потока, - это центрирование изображения в 'GridBagLayout'. Последнее не достигается в конструкторе, но с помощью ограничения компоновки (или, вернее, пренебрежения ею) при добавлении изображения. –

+0

@AndrewThompson: Когда я пишу это 'JPanel plafComponents = new JPanel (новый FlowLayout (FlowLayout.RIGHT, 3,3)),', он дает мне ошибку, говорящий, что не может найти символ, ПЕРЕМЕННЫЙ Вправо или что-то, что я использую. Что-то не так с моим JDK? Однако я могу использовать обычный конструктор FlowLayout. Надеюсь, вы можете посоветовать мне, что не так с моей стороны? или Должен ли я начать новый поток для этого? –

2

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

Если вы хотите, чтобы выровнять button..set позицию при добавлении его к панели или frame..something, как это ....

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

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

+0

Я не думаю, что эту работу .. Я пробовал, но ничего не меняется. Он говорит, что второй параметр для позиции, но по какой-то причине он ничего не меняет. – Dennis

2

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

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

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