Какой менеджер компоновки GUI GUI использует каждый пользователь? В последнее время я использовал MigLayout, в котором есть некоторые мощные элементы управления компонентами. Просто хотелось посмотреть, что другие разработчики используют, кроме стандартных JDK.
Какой менеджер макетов вы используете?
Ответ 1
MiGLayout - это менеджер компоновки графического интерфейса, который широко используется разработчиками Java.
Ответ 2
GridBagLayout можно использовать. Как только вы привыкнете к его использованию, он отлично работает. Я думаю, что стандартные менеджеры по планированию JDK довольно эффективны сами по себе. Кроме того, вы можете минимизировать зависимость от сторонних библиотек.
Ответ 3
МиГ и FormLayout (JGoodies) отлично подходят для ручной компоновки (и почти все макеты в конечном итоге становятся ручными). Мой самый большой совет состоит в том, чтобы проектировать ваши взгляды, чтобы вы могли полностью вырвать макет и повторно реализовать его, не оказывая влияния на ваше приложение (хорошее разделение зрения и контроллера здесь ключевое).
Определенно взгляните на подход JGoodie PresentationModel для реализации "немых" представлений. Я использую этот метод с построителем GUI (я использую GroupLayout с плагином Jigloo GUI builder) для отбрасывания быстрых прототипов. После 3 или 4 итераций, которые обычно выходят из окна, и мы выполняем повторное выполнение с использованием MiG или FormLayout.
EDIT: Поскольку я написал это, я перешел на использование МиГ для всех своих макетов, и я больше не использую построитель графического интерфейса - это просто слишком просто, чтобы проложить вещи с помощью МиГ.
Ответ 4
Последнее приложение Swing я работал над JGoodies 'FormsLayout.
Ответ 5
Я использую GridBagLayout. Похоже, что он использует много кода, но он делает очень красивые макеты.
Я также хотел бы объединить BorderLayout с панелями GridBagLayout для большой настраиваемости.
Ответ 6
Я использую для GridBagLayout для элемента управления, но поскольку java1.6 я использую GroupLayout, это просто.
Вот скриншот и пример кода, чтобы использовать его!
alt text http://img145.imageshack.us/img145/7844/screenshot1dz8.png
private void layoutComponents(){
JPanel panel = new JPanel();
GroupLayout layout = new GroupLayout(panel);
panel.setLayout(layout);
layout.setAutoCreateGaps(true);
layout.setAutoCreateContainerGaps(true);
SequentialGroup hGroup = layout.createSequentialGroup();
JLabel nameLbl = new JLabel("Name");
JLabel countLbl = new JLabel("Amount");
JLabel dateLbl = new JLabel("Date(dd/MM/yy)");
hGroup.addGroup(layout.createParallelGroup().
addComponent(nameLbl).
addComponent(countLbl).
addComponent(dateLbl).
addComponent(go));
hGroup.addGroup(layout.createParallelGroup().
addComponent(name).
addComponent(count).
addComponent(date));
layout.setHorizontalGroup(hGroup);
SequentialGroup vGroup = layout.createSequentialGroup();
vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE).
addComponent(nameLbl).addComponent(name));
vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE).
addComponent(countLbl).addComponent(count));
vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE).
addComponent(dateLbl).addComponent(date));
vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE).
addComponent(go));
layout.setVerticalGroup(vGroup);
frame.add( panel , BorderLayout.NORTH );
frame.add( new JScrollPane( textArea ) );
}
Ответ 7
Я использую DesignGridLayout для большинства моих панелей.
Для редких панелей, которые DesignGridLayout
не может полностью обрабатывать, я использую сочетание Borderlayout и DesignGridLayout
.
С помощью DesigngridLayout вы можете вручную скопировать свои макеты с минимальным количеством строк кода, которые легко ввести и прочитать:
DesignGridLayouut layout = new DesignGridLayout(myPanel);
layout.row().grid(lblFirstName).add(txfFirstName).grid(lblSurName).add(txfSurName);
layout.row().grid(lblAddress).add(txfAddress);
layout.row().center().add(btnOK, btnCancel);
Каждая строка сетки панели определяется одной строкой кода. Как вы можете видеть, "рисование" вашей панели довольно просто.
Кроме того, я нахожу, что DesignGridLayout
имеет некоторые уникальные функции (например, его интеллектуальное вертикальное изменение размера).
Ответ 8
Я большой поклонник использования TableLayout вместо GridBagLayout. Все имеет смысл, тогда как каждый раз, когда я пытаюсь использовать GridBagLayout, он сокрушает мою душу.
Ответ 9
GridBagLayout является мощным, но вполне примитивным: код, который соединяет макет, очень многословен. Эта утилитная библиотека (фактический только 1 файл jar, содержащий около 10 классов) упрощает множество работ: http://code.google.com/p/painless-gridbag/ Следующий фрагмент цитируется из домашняя страница этого сайта:
PainlessGridBag gbl = new PainlessGridBag(getContentPane(), false);
gbl.row().cell(lblFirstName).cell(txtFirstName).fillX()
.cell(lblFamilyName).cell(txtFamilyName).fillX();
gbl.row().cell(lblAddress).cellXRemainder(txtAddress).fillX();
gbl.doneAndPushEverythingToTop();
Ответ 10
Как общий обзор, вы можете найти статью, которую я написал на прошлой неделе на солнце, чтобы быть полезной. Он не обновляется с последними менеджерами макетов, но он концентрируется на эффективном размещении менеджеров макетов, а не пытается сделать все с помощью одного макета.
См. http://developer.java.sun.com/developer/onlineTraining/GUI/AWTLayoutMgr
Ответ 11
Я обнаружил, что для любого нетривиального GUI я использую несколько макетов с вложенными подпанелями, где главная панель может иметь GridBagLayout
и каждую подпанель (обычно без рамки или указания, что это панель), где это возможно, использует более простую компоновку. Обычно я использую BorderLayout
, FlowLayout
и BoxLayout
для небольших, более простых подпанелей. Разделение небольших разделов графического интерфейса на субпанели и использование простейшей компоновки, позволяющей контролировать этот раздел графического интерфейса, вы можете создавать сложные, хорошо организованные дисплеи без слишком большой головной боли из GridBagLayout
множества опций. Кроме того, группируя функции отображения в панель, он создает более читаемый код.
Ответ 12
Spring макет, который был разработан для создателя мантиссы gui, который является частью netbeans.
Ответ 13
Я использовал GroupLayout. Опять же, его стандартный менеджер компоновки JDK с Java6, но вы также можете найти библиотеку.
Ответ 14
Я всегда был большим поклонником GridBagLayout. Он очень похож на HTML-таблицы, поэтому он интуитивно понятен тем веб-программистам.
Ответ 15
Я начал использовать различные вложенные макеты, а затем перешел к GridBagLayout (что довольно расстраивает). С тех пор я попробовал FormLayout (но обнаружил, что он не подходит ни к чему, кроме форм), и решительно остановился на TableLayout, в целом я очень доволен.
С тех пор я обнаружил MiGLayout, и хотя я не сделал больше, чем играю с ним, он кажется очень способным, очень похожим на TableLayout и, вероятно, немного чище.
Большим плюсом для меня является то, что MiGLayout настроен на то, чтобы стать частью JDK, поэтому я намерен использовать его в значительной степени исключительно, когда он это делает.
Другая вещь, которую нужно помнить, - это то, что независимо от того, какой тяжелый LayoutManager вы планируете, всегда есть место для некоторых более простых менеджеров компоновки, таких как GridLayout. Я видел некоторые ужасные вещи, сделанные с GridBagLayout, которые можно было бы сделать намного проще с помощью более простого менеджера компоновки.
Ответ 16
Я предпочитаю свести к минимуму зависимости от сторонних библиотек, поэтому обычно это диалоговое окно BoxLayout и GridBagLayout для "сложных" макетов. GridBagLayout достаточно легко понять, но немного сложно настроить. Я написал себе инструмент для создания кода из макетов HTML (надеюсь, что это тоже помогает другим): http://www.onyxbits.de/content/blog/patrick/java-gui-building-gridbaglayout-manager-made-easy
Ответ 17
Единственный менеджер макетов, который я нашел, что я на самом деле , как, является Relative Layout Manager. Диспетчер относительной компоновки работает таким образом, который согласуется с тем, как диалоговые окна концептуально организованы. Одна обратная сторона заключается в том, что, хотя этот менеджер компоновки имеет дело с аддитивными ограничениями. По-видимому, это не касается ограничений отношения. К счастью, он довольно хорошо разработан, и я смог реализовать эту функцию.
Ответ 18
Я использую BorderLayout 90% времени при вложенности BoxLayout и SpringLayout
Ответ 19
Я немного новичок в Java.
Я попробовал GridBagLayout, сдался, затем попробовал BoxLayout, затем сдался, затем создал свой собственный Custom Layout, который работал. С GridBag и Box я поставил свое лучшее предположение, и механизмы компоновки решили сделать что-то другое, без видимого способа их отладки.
С помощью своего пользовательского макета я мог распечатать координаты, ширину и высоту, чтобы узнать, где это происходит. Его немного мати, помещая вещи, но у вас есть полная сила java для использования, а не ограниченная лексика одного из встроенных менеджеров макетов.
Конечно, это было только для домашнего проекта, вам никогда не позволили бы это делать на работе.
Ответ 20
Я использую GridBagLayout для формы, такой как макеты, используйте BorderLayout для простых макетов и FlowLayout для количества горизонтальных значков/кнопок, у которых есть промежутки между ними. Netbeans также является хорошим графическим дизайнером, который может избежать множества утомительных компоновки компоновки, чтобы сэкономить ваше время.
Ответ 21
Я начал использовать Swing недавно, и я использую GridBagLayout.
Ответ 22
Мне было больно всех тех менеджеров макетов, которые нуждались во многих настройках, которые были очень читабельны или изнурительны, чтобы сделать это вручную, поэтому я написал своего очень простого лаута-менеджера, который использует абстракцию двух фотокорнеров, поддерживающих каждый компонент на месте. Вы можете добавить свой компонент следующим образом: parent.add(child,"topleft(0, 0.5)bottomright(0.5,1.0)");
Посмотрите здесь https://github.com/hageldave/UsefulStuff/blob/master/src/PhotoCornersLayout.java;) вы сами отвечаете за правильный макет, не заставляя его не проверять перекрытия или другие недостатки вашего макета.