Выравнивание компонентов в графическом окне - PullRequest
4 голосов
/ 26 июля 2011

У меня есть окно, которое выглядит как window1, и я хотел бы, чтобы оно было похоже на window2:

enter image description here

Это мой код:

    String q = "Have you used GUI before?";     
    JLabel textLabel2 = new JLabel(
        "<html><div style=\"text-align: center;\">" + q + "</html>", SwingConstants.CENTER);
    add(textLabel2, BorderLayout.NORTH);

    JPanel radioPanel = new JPanel();                                           
    add(radioPanel, BorderLayout.CENTER);

    JPanel btnPanel = new JPanel();
    add(btnPanel, BorderLayout.SOUTH);

Для радиокнопок я пытался использовать GridLayout, но он сломал позиции «Да» и «Нет». А для кнопок «назад» и «далее» горизонтальное выравнивание не сработало (btnPanel.setAlignmentX(RIGHT_ALIGNMENT);), видимо. Любые решения будут высоко оценены, я застрял с этим слишком долго. Спасибо

- EDIT -
Это отлично работает:

btnPanel.setLayout(new BoxLayout(btnPanel, BoxLayout.LINE_AXIS));
btnPanel.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10));
btnPanel.add(Box.createHorizontalGlue());

так что проблема с кнопками решена.
Тем не менее, по-прежнему не удается исправить радио-кнопки.

- РЕДАКТИРОВАТЬ 2 -
Исправлен фон для радио-кнопок с использованием setOpaque(false);

Ответы [ 2 ]

4 голосов
/ 26 июля 2011

Несколько вещей, которые вы можете сделать по этому поводу.Вам нужно изменить свой LayoutManager.Это не очень хорошая задача для BorderLayout.Вы можете сделать вложенные BoxLayouts.Вертикальная коробка с вертикальной стойкой с фиксированной высотой, надписью, вертикальной стойкой с фиксированной высотой, с радиоприемником, с вертикальной фиксированной стойкой, без радиоприемника, с вертикальным клеем и с последней панелью кнопок.Затем используйте ваши правки на панели кнопок, чтобы выровнять их по горизонтали.Это один из вариантов, но вложение панелей раздражает.

Другой вариант - получить TableLayout и научиться его использовать.TableLayout является одним из лучших LayoutManager.Он прост в использовании, тщательно протестирован и делает Swing снова увлекательным.Вы никогда больше не будете использовать GridBagLayout.

http://java.sun.com/products/jfc/tsc/articles/tablelayout/

Последний вариант - использовать новый GroupLayout.Я не очень знаком с этим, но это выглядит довольно легко.И это не займет столько кода или вложенных ненужных панелей, как Box.

4 голосов
/ 26 июля 2011

Что вы подразумеваете под этим «сломал» позиции «да» и «нет», так как GridLayout должен работать просто отлично.Я бы дал ему 1 столбец и 2 (или 0 для переменного числа) строк через new GridLayout(0, 1).Убедитесь, что его непрозрачное свойство установлено как ложное, выполнив radioPanel.setOpaque(false);.Таким образом, он покажет цвет фона контейнера, в котором он находится. Возможно, вам также понадобится сделать непрозрачными JRadioButtons, я не уверен.

Ваша btnPanel может использовать BoxLayout и использовать Box.createGlue () для нажатия кнопок на правой стороне.

Самое главное - если вы еще этого не сделали, прочитайте учебные руководства по использованию менеджеров компоновки Swing, которые вы можете найти здесь .

...