Нет очень, я могу добавить к какой и почему из P =? Часть NP вопроса, но в отношении доказательства. Мало того, что доказательство стоило бы некоторый дополнительный кредит, но это решит один из проблемы Тысячелетия . Интересный опрос был недавно проведен и , опубликованные результаты (PDF) определенно стоит считать в отношении предмета доказательства.
MiGLayout, no doubt. Honestly, it's the only Swing layout manager I know of that makes any sense.
The mere fact that there are 8 layout managers in the core JDK is a good sign that the Swing creators had absolutely no idea about what they were trying to do. This is not to trash the rest of the Swing - it's a good GUI toolkit, except for the layout managers.
На ваш вопрос нет настоящего ответа, кроме следующего: это зависит от обстоятельств. Это зависит от того, какую рамку (форму) вы пытаетесь создать. Я не гуру Swing, но создал пару (умеренно продвинутых) графических интерфейсов, и мне никогда не приходилось прикасаться к менеджеру GridBagLayout. Мне всегда удавалось создавать свой графический интерфейс, используя комбинацию «более простых» менеджеров компоновки. Например, вы можете присвоить своему фрейму BorderLayout, а затем поместить другой макет в ЮГ этого BorderLayout.
Use IntelliJ IDEA with its GUI designer. Makes GridBagLayout easy.
GridBagLayout
. Имеет почти все, что вам нужно (вроде), и находится в библиотеке Java. По общему признанию, ему действительно нужна помощь, а API ужасен.
GroupLayout
вносит настоящий беспорядок в ваш код макета. Итак, код GUI для большинства людей - это большой комок грязи. Но вашего не должно быть! Возможно, в этот менеджер компоновки можно было бы добавить приятный интерфейс, но я подозреваю, что его, возможно, придется клонировать и владеть.
Я не сторонник введения внешних зависимостей, если они действительно не нужны. Также многие сторонние менеджеры по расположению используют строки данных, которые имеют все обычные проблемы.
Обычно я использую макет границы с сеткой , сначала я создаю пользовательский интерфейс на бумажном прототипе, например;
(источник: usernomics. com )
После этого мы можем разделить экран на gridlayout на borderlayout. На этом рисунке мы видим СЕВЕР, ЦЕНТР, ЮГ часть (элементы BorderLayout), и макет каждой части может быть сеткой или BorderLayout, это зависит от вас. Одинаковые макеты можно использовать друг в друге.
GroupLayout довольно прилично. Первоначально он был предназначен для использования в приложениях GUI Builder, но я обнаружил, что его очень просто кодировать вручную.
Если время вычислений не является проблемой, вы можете использовать детерминированный генератор возможных позиций для присвоения уникальных идентификаторов данной позиции.
Из данной позиции сначала сгенерируйте количество возможных позиций в детерминированная усадьба, например, начиная с нижнего левого угла до верхнего правого. Это определяет, сколько бит вам понадобится для следующего хода, в некоторых ситуациях это может быть всего один. Затем, когда делается ход, сохраняется только уникальный идентификатор этого хода.
Повышение и другие правила просто считаются действительными, если они обрабатываются детерминированным образом, например, в ферзя, в ладью, в слона, каждый считается как отдельный ход.
Начальная позиция самая сложная и может генерировать около 250 миллионов возможных позиций (я думаю), что потребует около 28 бит плюс дополнительный бит, чтобы определить, чей это ход. недостаточно гибок для интенсивного использования.
Все вместе. В этом весь смысл. Каждый менеджер компоновки выполняет разные требования, и, объединяя панели с разными менеджерами компоновки, вы можете добиться почти всего.
Диспетчеры компоновки «делать все на одной панели», такие как GridBagLayout
и GroupLayout
(и множество сторонних), имеют свое место, в основном, когда вам нужны компоненты в разных частях макета для выравнивания, но при большом макете они обычно приводят к огромному беспорядку, с которым трудно справиться.
Это зависит от того, какой графический интерфейс вы создаете. Вы можете использовать только один или два простых макета или вам может потребоваться более сложный макет. Мое общее использование менеджера компоновки, вероятно, будет разбито на что-то вроде этого, хотя это будет зависеть от проекта:
Как только вы освоите GridBagLayout, писать на начальном этапе не так уж и плохо, но с ним все равно не очень приятно работать или отладить позже. Недавно я попробовал MiGLayout для чего-то и был разочарован, обнаружив, что MiGLayout на самом деле оказался более более сложным в использовании, чем GridBagLayout в этом конкретном случае.
Некоторые люди пытаются избегать GridBagLayout как чумы; но правда в том, что есть вещи, с которыми никакая комбинация простых макетов не справится. Можно разбить графический интерфейс на панели для разных логических разделов, но я думаю, что если вы создаете целую кучу ненужных дополнительных вложенных панелей только с целью позиционирования компонентов, вам явно нужно научиться использовать GridBagLayout (или другой аналогичный расширенный макет, например MiGLayout). Вы можете заставить ваш графический интерфейс выглядеть нормально с неприятным беспорядком вложенных BorderLayouts, GridLayouts и BoxLayouts, но как только кто-то начнет изменять размер окон и диалогов вашего приложения, чтобы они были меньше или больше, чем вы их изначально проектировали, ваш графический интерфейс, вероятно, будет выглядеть ужасно и ваши клиенты начнут формировать отрицательное мнение о вашем продукте, так как вы не могли понять такую простую вещь правильно.
Обновление: я уже некоторое время использую WindowBuilder в Eclipse, и это значительно упрощает работу со многими макеты, особенно GridBagLayout. Раньше я тратил много времени на написание макетов вручную, но с WindowBuilder или, возможно, с любым аналогичным продвинутым визуальным редактором вы можете создавать макеты гораздо быстрее.
FormLayout
, часть пакета JGoodies Forms , была для меня рабочей лошадкой. Он не совсем гибкий в том смысле, что он усердно работает над тем, чтобы ваш дизайн выглядел хорошо. Я использовал его в течение нескольких лет в десятках проектов, и он быстро дает хорошие результаты.
Вы указываете свой макет в виде удобочитаемого текста, а затем добавляете компоненты. Готово.