Как поставить флажок под текстовыми полями в Swing? - PullRequest
2 голосов
/ 13 февраля 2011

У меня есть текстовое поле для представления имени и поле со списком для типа регистрации. Затем, рядом с этим у меня есть флажок, но он должен быть под двумя другими полями. Вот что я кодировал:

   public RegPanel()
   {
      //create a new panel
      new GridLayout(2,1);  
      //create one of two subpanels
      subPanel = new JPanel(new FlowLayout());
      //create a textfield
      regTextField = new JTextField(20);
      //create a combobox and don't let anyone add to it
      regComboBox = new JComboBox(regOptions);
      //create a border for the subpanel      
      subPanel.setBorder(BorderFactory.createTitledBorder("Registrant's Name & Type")); 
      //add regTypePanel and regBox to the panel     
      subPanel.add(regTextField);
      subPanel.add(regComboBox);
      //create a second subpanel with a flowlayout
      subPanel2 = new JPanel(new FlowLayout());
      //create a checkbox
      regCheckBox = new JCheckBox("Dinner and Keynote Speech");
      subPanel2.add(regCheckBox);
      //add the subpanels to the main panel
      add(subPanel);
      add(subPanel2);
   }

Есть идеи, что мне не хватает? Извините за дерьмовый макет, я не могу понять, как исправить вид.

Итак, я понял, что не правильно установил GridLayout, поэтому я изменил его на "setLayout (new GridLayout (2,1)); Но теперь, на моем графическом интерфейсе, он полностью испортил положение всех остальных элементов.

Ответы [ 4 ]

2 голосов
/ 13 февраля 2011

В любом случае new GridLayout(...) ничего не делать, если вы не используете его в setLayout(...).

Вы можете попробовать использовать Box.createVerticalBox () ( sample ) вместо GridLayout, чтобы ваши компонентывертикальное выравнивание.

1 голос
/ 13 февраля 2011

В вашем случае вы используете

  • RegPanel (какой макет?)
    • subPanel (FlowLayout)
      • regTextField
      • regComboBox
    • subPanel2 (FlowLayout)
      • regCheckBox

Какой макет имеет ваша основная RegPanel?Он имеет макет JPanel по умолчанию (если RegPanel является подклассом JPanel), который является FlowLayout.Итак, ваша RegPanel отображает две подпанели помимо друг друга, что выглядит примерно так, как если бы у вас была только одна Панель со всеми компонентами.Итак, вашей RegPanel тоже нужен LayoutManager - GridLayout (2,1) выглядит нормально (если вы не хотите выравнивать компоненты в двух строках).


In myтекущий проект , я использую только GroupLayout (кроме одного случайного BorderLayout).Требуется немного времени, чтобы привыкнуть (и класс-обертка, чтобы сделать код проще для написания и чтения), но для такого рода форм это кажется идеальным (если оно ограничено встроенными менеджерами по расположению).

0 голосов
/ 13 февраля 2011

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

0 голосов
/ 13 февраля 2011

Также вы можете использовать BorderLayout и понимать, что вы вкладываете один макет в другой макет для достижения другого эффекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...