#java #swing #layout
Вопрос:
Какой менеджер компоновки графического интерфейса java используют все? В последнее время я использую MigLayout, в котором есть несколько мощных элементов управления компонентами. Просто хотел посмотреть, что используют другие разработчики, кроме стандартных JDK.
Ответ №1:
MigLayout-это менеджер компоновки графического интерфейса, который широко используется разработчиками Java.
Комментарии:
1. я только что попробовал, и это ПОТРЯСАЮЩЕ! Просто загляните на сайт, и вы все узнаете наверняка. Не нужно оправдываться словами, когда вы можете увидеть это в действии!!
2. Давайте добавим некоторые плюсы и минусы. Самой выдающейся особенностью MigLayout, вероятно, является его режим отладки, показывающий границы ячеек и компонентов пунктирными линиями, наложенными на пользовательский интерфейс. Это жизненно важно, чтобы понять, почему макет выходит из строя. Минусы… ну, это не часть JDK, но это просто зависимость в 75 тыс.
3. MigLayout легко освоить и делать именно то, что вы ожидаете. Просто распечатайте его «шпаргалку». У него есть хороший пример приложения. Можно писать читаемые и изменяемые макеты. Он имеет полезный режим отладки. Я писал заявки на Swing в течение 2 лет. Поверьте мне, не используйте стандартные макеты, это мучительный путь в ад, используйте MigLayout.
Ответ №2:
GridBagLayout можно использовать. Как только вы привыкнете его использовать, он будет отлично работать. Я думаю, что стандартные менеджеры компоновки JDK сами по себе довольно мощные. Кроме того, вы сводите к минимуму зависимость от сторонних библиотек.
Ответ №3:
MiG и FormLayout (JGoodies) отлично подходят для ручной компоновки (и почти вся компоновка в конечном итоге становится ручной). Мой самый большой совет-спроектировать ваши представления так, чтобы вы могли полностью удалить макет и повторно реализовать его, не влияя на ваше приложение (здесь ключевое значение имеет хорошее разделение представления и контроллера).
Определенно взгляните на подход JGoodie к модели представления для реализации «тупых» представлений. Я использую эту технику с построителем графического интерфейса (я использую groupplayout с плагином Jigloo GUI builder) для создания быстрых прототипов. После 3 или 4 итераций это обычно выходит за рамки, и мы выполняем повторную реализацию с помощью MiG или FormLayout.
ПРАВКА: С тех пор, как я написал это, я перешел на использование MiG для всех своих макетов, и я больше не использую конструктор графического интерфейса — просто слишком легко все разложить с помощью MiG.
Ответ №4:
Последнее приложение Swing, над которым я работал, использовало отображение форм JGoodies.
Ответ №5:
Я использую GridBagLayout. Кажется, что для этого требуется много кода, но это делает очень красивые макеты.
Мне также нравится комбинировать BorderLayout с панелями GridBagLayout для отличной настройки.
Ответ №6:
Я большой поклонник использования TableLayout вместо GridBagLayout. Все просто имеет смысл, в то время как каждый раз, когда я пытаюсь использовать GridBagLayout, это сокрушает мою душу.
Ответ №7:
Я использую GridBagLayout для управления, но, поскольку java1.6, я собираюсь использовать groupplayout, это ужасно.
Вот скриншот и пример кода для его использования!.
альтернативный текст 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 ) );
}
Комментарии:
1. Я удалил мертвую ссылку . .
Ответ №8:
Я использую 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
, что у него есть некоторые уникальные функции (такие как «умный вертикальный размер«).
Комментарии:
1. Ой, я забыл обычную оговорку: «Я один из владельцев проекта DesignGridLayout»;-)
Ответ №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();
Комментарии:
1. Это имеет то преимущество, что вы можете просто скопировать 10 классов в свой проект и не зависеть от сторонней библиотеки…
Ответ №10:
В качестве общего обзора вы можете счесть полезной статью, которую я написал много лет назад в sun. Он не в курсе последних версий менеджеров по верстке, но он концентрируется на эффективной вложенности менеджеров по верстке, а не на попытке сделать все с помощью одного макета.
Видишь http://developer.java.sun.com/developer/onlineTraining/GUI/AWTLayoutMgr
Ответ №11:
Я обнаружил, что для любого нетривиального графического интерфейса я использую несколько макетов с вложенными подпанелями, где на главной панели может быть a GridBagLayout
, и каждая подпанель (обычно без границы или указания на то, что это панель) использует более простой макет, где это возможно. Обычно я буду использовать BorderLayout
, FlowLayout
, и BoxLayout
для небольших, более простых под-панелей. Разделив небольшие разделы графического интерфейса на подпанели и используя максимально простую компоновку для управления этим разделом графического интерфейса, вы можете создавать сложные, хорошо организованные дисплеи без лишней головной боли из GridBagLayout
-за множества опций. Кроме того, группируя функции отображения в панели, он создает более читаемый код.
Ответ №12:
Макет Spring, разработанный для конструктора графического интерфейса mantissa, который является частью netbeans.
Комментарии:
1. Я думал, Матисс использовал групповую игру.
2. В BDK был конструктор графического интерфейса SpringLayout. Я бы не рекомендовал этого делать. Внутренне реализация groupplayout использует то, что она называет пружинами.
Ответ №13:
Я также использовал Groupplayout. Опять же, это стандартный менеджер компоновки JDK начиная с Java6, но вы также можете найти библиотеку отдельно.
Ответ №14:
Я всегда был большим поклонником GridBagLayout. Он очень похож на HTML-таблицы, поэтому интуитивно понятен для веб-программистов.
Ответ №15:
Я начал с использования различных вложенных макетов, затем перешел к GridBagLayout (что довольно неприятно). С тех пор я попробовал FormLayout (но обнаружил, что он не подходит ни для чего, кроме форм) и твердо остановился на TableLayout, чем в целом я очень доволен.
С тех пор я открыл для себя MigLayout, и хотя я не сделал ничего, кроме как поиграл с ним, он кажется очень способным, очень похожим на TableLayout и, вероятно, немного чище.
Большим плюсом для меня является то, что MigLayout собирается стать частью JDK, поэтому я намерен использовать его практически исключительно, когда это произойдет.
Еще одна вещь, которую следует помнить, заключается в том, что независимо от того, на каком тяжеловесном менеджере компоновки вы остановитесь, всегда найдется место для некоторых более простых менеджеров компоновки, таких как GridLayout. Я видел некоторые ужасные вещи, сделанные с помощью GridBagLayout, которые можно было бы сделать гораздо проще с помощью более простого менеджера компоновки.
Ответ №16:
Я предпочитаю минимизировать зависимости от сторонних библиотек, поэтому для диалоговых окон обычно используется BoxLayout, а для «сложных» макетов-GridBagLayout. GridBagLayout достаточно прост для понимания, но немного сложен в настройке. Я написал сам инструмент для создания кода из HTML-макетов (надеюсь, это поможет и другим): http://www.onyxbits.de/content/blog/patrick/java-gui-building-gridbaglayout-manager-made-easy
Ответ №17:
Единственный менеджер макетов, который я нашел, который мне действительно нравится, — это Относительный менеджер макетов. Относительный менеджер компоновки работает в соответствии с тем, как концептуально организованы диалоговые окна. Одним из недостатков является то, что, хотя этот менеджер компоновки имеет дело с аддитивными ограничениями. Похоже, что он не имеет отношения к ограничениям соотношения. К счастью, он довольно хорошо разработан, и я смог реализовать эту функцию.
Ответ №18:
Я использую BorderLayout в 90% случаев, в то время как скворечник и SpringLayout
Ответ №19:
Я немного новичок в Java.
Я попробовал GridBagLayout, сдался, затем попробовал BoxLayout, затем сдался, затем сделал свой собственный макет, который сработал. С GridBag и коробкой я высказал свое лучшее предположение, и движки компоновки решили сделать что-то другое, без какого-либо очевидного способа их отладки.
С моим пользовательским макетом я мог распечатать координаты, ширину и высоту, чтобы выяснить, где что-то пошло не так. Это немного математично, но у вас есть вся мощь 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 😉 однако вы сами несете ответственность за правильную компоновку, потому что это не проверка перекрытий или других коротких замыканий вашего макета.