Java GUI LayoutManagers - PullRequest
       11

Java GUI LayoutManagers

1 голос
/ 29 октября 2008

Я занят назначением, где я должен сделать графический интерфейс для простой программы. Но я борюсь с макетом.

Это идея:
Layout Example

Какой самый простой способ выполнить такой макет?

И какой метод вы используете для создания макетов в Java. Просто закодируйте его или используйте IDE, например, netbeans?

Ответы [ 9 ]

4 голосов
/ 29 октября 2008

И какой метод вы используете для создания макетов в Java. Просто закодируйте его или используйте IDE, например, netbeans?

NetBeans для разработчиков графического интерфейса похож на калькулятор для школьников: вы действительно не должны его использовать, пока не научитесь обходиться без него, но тогда это сэкономит вам много времени.

(Я хотел бы ответить на ваш основной вопрос, но брандмауэр, который я позади, блокирует картину.)

2 голосов
/ 30 октября 2008

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

Раньше я делал много пользовательских интерфейсов, используя GridBagLayout, но в течение многих лет я никогда не видел пользовательского интерфейса офисной среды, который не мог бы быть построен с помощью вложенных BorderLayouts, GridLayouts и случайных BoxLayout или FlowLayout. Около 98% всего, что я видел, выполнимо с помощью вложенных BorderLayouts.

В вашем случае, организация размещения будет, как говорит bmeck. Говоря из памяти, использование CENTER для JTable (не забудьте поместить его в JScrollPane!) И NORTH для всего остального гарантирует, что при изменении размера JFrame JTable получит все дополнительное пространство, и это должно быть именно тем, что вы хотите , Для верхних меток и полей вложенные GridLayouts должны гарантировать, что каждый «столбец» меток и полей будет занимать одинаковое горизонтальное пространство. (Они получат достаточно вертикального пространства, чтобы быть полностью видимым, и не более, так как JTable занимает все остальное.)

Все остальное - просто добавление границ и разумная установка отступа GridLayout.

2 голосов
/ 30 октября 2008

Учитывая, насколько простой макет, я бы посоветовал вам использовать BorderLayout с NORTH, установленным в верхнюю секцию контейнера, и JTable в CENTER of BorderLayout. Для Top это, похоже, простой BorderLayout снова с NORTH в качестве Инструкции: юг как черный ящик (возможно, в контейнере с FlowLayout). В центре верхней панели отображаются 2 контейнера GridLayouts с 2 строками и 2 столбцами, поэтому поместите их в другой контейнер с GirdLayout.

Итак, в псевдо:

Container(BorderLayout)
{
  @NORTH
    Container(BorderLayout)
    {
       @NORTH
         Label(Instruction);
       @CENTER
         Container(GridLayout(2,1))
         {
            Container(GirdLayout(2,2))
            {
              Label() TextField()
              Label() TextField() 
            }
            Container(GirdLayout(2,2))
            {
              Label() TextField()
              Label() TextField()
            }
         }
       @SOUTH
         Container(FlowLayout())
         {
           JButton() //shaded thing?
         }
    }
  @CENTER
    {
      JTable
    }
}
1 голос
/ 11 февраля 2009

Использование GroupLayout

:)

Все выравнивания довольно легко сделать

1 голос
/ 11 февраля 2009

Попробуйте раскладку стола. Прекрасно работает.

https://tablelayout.dev.java.net/

1 голос
/ 03 ноября 2008

Я недавно написал статью о менеджерах верстки:

http://developer.java.sun.com/developer/onlineTraining/GUI/AWTLayoutMgr

Описывает, как вложение (как демонстрирует bmeck выше) может очень эффективно использоваться для многих конструкций пользовательского интерфейса.

1 голос
/ 02 ноября 2008

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

Всякий раз, когда я пытался использовать генераторы GUI для создания кода для менеджеров компоновки, меня почти всегда укусили, когда макет просто перестал работать, и я тратил больше времени на отладку невозможного для чтения автоматически сгенерированного кода, чем если бы В любом случае я сделал макет вручную. Для чего стоит, когда мы делаем раннюю фазу макетов, мы используем плагин Jigloo для Eclipse. Это очень недорого, и делает хорошую работу.

Я большой поклонник MiGLayout . Я обнаружил, что он невероятно прост в использовании для простых макетов и способен создавать чрезвычайно сложные макеты. Все без необходимости прибегать к вложенным панелям и т. Д. Формы JGoodies тоже хороши, но сложнее в использовании.

1 голос
/ 30 октября 2008

Для меня gui-строители для Swing или SWT никогда не работали так хорошо, поэтому я сам кодирую макеты с помощью менеджеров по компоновке. В вашем вопросе не упоминается, какую графическую систему вы используете, но я предполагаю, что вы хотите использовать Swing. Если это так, я бы порекомендовал использовать GridBagLayout для вашего макета. Поначалу это не так просто использовать, но как только вы узнаете, как это работает, вы сможете делать большинство макетов так, как вы хотите, и я думаю, что это также лучший менеджер компоновки для макета, который вы хотите сделать.

0 голосов
/ 29 октября 2008

Раньше я любил XmForm от Motif для такого рода вещей. В Java я обычно помещаю Коробки в коробки. Итак, у меня есть вертикальная коробка. Первый ряд коробки содержит JLabel для Инструкции. Вторая строка содержит что-то для метки / результата, возможно, какую-то сетку. Третий ряд содержит все, что затемнено, Четвертый ряд содержит JTable. Затем я потратил некоторое время, чтобы попытаться выяснить, как сделать материал с метками / результатами. Тогда я, вероятно, в итоге сказал бы «черт побери» и сделал бы это как GridBagLayout.

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