Подтвердить что ты не робот

Какой макет Swing вы рекомендуете?

В библиотеке Java есть только 8 менеджеров макета, а затем есть и группа сторонних продуктов.

На днях я попытался использовать SpringLayout и... ну, это не работает для меня. См. Мой другой вопрос. Итак... если у вас есть приложение Swing для разработки, и вы хотите, чтобы ваш макет был именно таким, каковы ваши предпочтительные менеджеры макетов? Любой интересный/полезный опыт для общения?

Обновление:. Конечно, я знаю, что разные LM подходят для разных макетов. Но я бы ожидал, что большинство из вас используют 1, 2 или, возможно, 3 для большинства всего, что вы делаете, или вы клянетесь одним, который настолько универсален, что вам больше ничего не понадобится. С достаточным количеством ответов я бы ожидал увидеть что-то вроде кривой колокола, с пиком на GridBagLayout или MigLayout (например) и длинным хвостом нескольких отставших, используя (скажем) BoxLayout или FlowLayout.

Будем надеяться, что распределение ответов покажет некоторые тенденции относительно того, что люди больше всего используют, чтобы получить готовый материал и торговать;


ОБНОВЛЕНИЕ и резюме

ОК, после почти двух дней, MiGLayout, безусловно, впереди! Его поклонники будут рады услышать, что похоже, что этот макет скоро войдет в "официальную" библиотеку.

GroupLayout, FormsLayout и TableLayout являются относительно новыми и не получили большой нагрузки. Возможно, другие будут так же удивлены, узнав о них, как и я.

4b9b3361

Ответ 1

MiGLayout, без сомнения. Честно говоря, это единственный менеджер макетов Swing, о котором я знаю, имеет смысл.

Сам факт того, что в основной JDK есть 8 менеджеров макетов, это хороший признак того, что создатели Swing не имели абсолютно никакого представления о том, что они пытались сделать. Это не для того, чтобы уничтожить остальную часть Swing - это хороший инструментарий GUI, за исключением менеджеров компоновки.

Ответ 2

Все они в сочетании.. Это все. Каждый менеджер компоновки выполняет разные требования, а при вставке панелей с разными менеджерами компоновки вы можете добиться почти чего угодно.

"Делают все в одной панели" менеджеры макетов, такие как GridBagLayout и GroupLayout (и много сторонних), имеют свое место, главным образом, когда вам нужны компоненты в разных частях макета для выравнивания, но с большая компоновка, они обычно приводят к огромному, труднодоступному беспорядку.

Ответ 3

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

  • 65% GridBagLayout - один макет, который будет выполнен, независимо от того, что вам нужно делать.
  • 15% Box/BoxLayout - отлично подходит для быстрого и простого прикрепления пары компонентов.
  • 12% BorderLayout - Хорошо для прикрепления панели кнопок или информационной панели к панели содержимого. Я почти всегда использую его для добавления контента в JFrame.
  • 3% FlowLayout - полезно для кнопочных панелей, но не более того.
  • 3% CardLayout - В основном полезно в программах, отображающих разные панели контента для разных режимов работы.
  • 2% Другие макеты - очень редко, что мне нужно что-то еще, но иногда один из других макетов подходит.

Как только вы получите зависание GridBagLayout, сначала не так плохо писать, но с ним все еще не красиво работать или позже отлаживать. Я недавно попробовал MiGLayout и был разочарован тем, что MiGLayout на самом деле оказался более сложным в использовании, чем GridBagLayout в этом конкретном случае.

Некоторые люди стараются избегать GridBagLayout, как чумы; но, по правде говоря, есть некоторые вещи, которые никакая комбинация простых макетов не сможет справиться. Прекрасно разделять графический интерфейс на панели для разных логических разделов, но я думаю, что если вы создаете целую кучу ненужных дополнительных вложенных панелей только для того, чтобы позиционировать компоненты, вам явно нужно научиться использовать GridBagLayout (или другое аналогично расширенная компоновка, например, MiGLayout). Вы можете заставить свой графический интерфейс выглядеть нормально с неприятным беспорядком вложенных BorderLayouts и GridLayouts и BoxLayouts, но как только кто-то начнет изменять размер ваших окон и диалогов приложений, будет либо меньше, либо больше, чем вы изначально планировали, ваш графический интерфейс, вероятно, будет выглядеть ужасно и ваши клиенты начнут формировать негативное мнение о вашем продукте, так как вы не можете получить такую ​​простую вещь.

Обновление: я уже давно использую WindowBuilder в Eclipse, и это значительно упрощает работу со многими макетами, особенно GridBagLayout. Я потратил много времени на создание макетов вручную, но с помощью WindowBuilder или, возможно, с любым аналогичным расширенным визуальным редактором вы можете создавать макеты за меньшее время.

Ответ 4

DesignGridLayout оба отлично смотрятся и просты в использовании благодаря плавному интерфейсу.

просто посмотрите на пример:

enter image description here

всего несколькими строками чистого кода:

    layout.row().grid(label("Last Name"))   .add(lastNameField) .grid(label("First Name"))  .add(firstNameField);
    layout.row().grid(label("Phone"))       .add(phoneField)    .grid(label("Email"))       .add(emailField);
    layout.row().grid(label("Address 1"))   .add(address1Field);
    layout.row().grid(label("Address 2"))   .add(address2Field);
    layout.row().grid(label("City"), 1)     .add(cityField);
    layout.row().grid(label("State"))       .add(stateField)    .grid(label("Postal Code")) .add(postalField);
    layout.row().grid(label("Country"), 1)  .add(countryField);
    layout.emptyRow();
    layout.row().center().add(newButton).add(deleteButton).add(editButton).add(saveButton).add(cancelButton);

Ответ 5

Это зависит от того, какой тип макета вам нужен, почему у вас их 8:

  • BorderLayout, простой и весьма полезный для разработки обычных кадров контента (с основным содержимым в середине и помощниками по сторонам).
  • GridLayout, полезно, когда у вас есть сетка объектов, которые должны быть одного размера (текстовые поля кнопок?).
  • GridBagLayout, очень гибкий, нуждается в некоторой настройке, чтобы быть в порядке, и это довольно многословно (но я раскоментирую это, если вы хотите сделать что-то хорошо).
  • FlowLayout, бесполезно.. не очень макет: просто поместив элемент один рядом с другим.
  • CardLayout, полезно для вкладок или подсмотров, которые необходимо переключить.
  • BoxLayout, никогда не использовал его слишком сильно.. он должен быть своего рода улучшенным FlowLayout, но он недостаточно гибким для интенсивного использования.

Ответ 6

GroupLayout довольно приличный. Первоначально он предназначался для использования приложениями GUI Builder, но я нашел, что это тоже очень удобно для кода вручную.

Ответ 7

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

Вы указываете свой макет в тексте, читаемом человеком, а затем добавляете компоненты. Готово.

Ответ 8

GridBagLayout. В значительной степени все, что вам нужно (вроде) и это в библиотеке Java. По общему признанию, это требует некоторой помощи, и API ужасен.

GroupLayout делает реальный беспорядок вашего кода макета. Хорошо, так что большинство людей GUI-код - большой шар грязи. Но твоего не должно быть! Возможно, в этот менеджер компоновки может быть добавлен приятный интерфейс, но я подозреваю, что он может быть клонирован и принадлежит.

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

Ответ 9

Я обычно использую макет границы с gridlayout, сначала я проектирую пользовательский интерфейс на бумажном прототипе, как;

alt text
(источник: usernomics.com)

После этого мы можем разделить экран на gridlayout на borderlayout. На этом рисунке мы видим детали NORTH, CENTER, SOUTH (элементы BorderLayout), и каждая компоновка детали может быть gridlayout или BorderLayout, это зависит от вас. Одни и те же макеты могут использовать один внутри другого.

Ответ 10

Нет никакого реального ответа на ваш вопрос, кроме этого: это зависит. Это зависит от того, какой тип рамки (формы) вы пытаетесь создать. Я не Свинг-гуру, но создал несколько (умеренно продвинутый) графический интерфейс и никогда не нуждался в том, чтобы прикасаться к менеджеру GridBagLayout. Я всегда мог создать свой графический интерфейс, используя комбинацию "более простых" менеджеров компоновки. Например, вы можете предоставить вашему кадру BorderLayout, а затем поместить другой макет в SOUTH этого BorderLayout.

Ответ 12

Я использую только GridBagLayout, особенно при выполнении сложного интерфейса, верьте, что GridBagLayout может что-то сделать. Я также рекомендовал FlowLayout, потому что он прост в использовании и понятен, хорош для размещения группы кнопок. На самом деле, я использую только эти два макета, так как он является частью библиотеки JDK, так как для MigLayout я еще не пробовал его, поэтому пока не могу рекомендовать его для вас.

Ответ 13

Доступны следующие варианты компоновки:

MiGLayout
TableLayout
GroupLayout
FormsLayout

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

Ответ 14

Я неофит Swing, но в процессе написания моего первого приложения Swing я пробовал четыре разных менеджера макетов: FlowLayout, BoxLayout, GridLayout и GroupLayout. На мой взгляд, FlowLayout и BoxLayout кажутся наиболее подходящими для выкладки групп компонентов одинакового размера. Для компонентов разного размера, GroupLayout, похоже, идет по пути. Более крутая кривая обучения, чем две другие, но определенно стоит того. Что касается GridLayout, я бы сказал, что вы можете достичь тех же результатов, что и с этим менеджером макетов, используя комбинацию FlowLayout и BoxLayout - и у вас, вероятно, будет больше контроля над размещением ваших компонентов. Но возможно, что только я:)

Шелдон