Какое расположение (расположения) Swing Вы рекомендуете? [закрытый]

Нет очень, я могу добавить к какой и почему из P =? Часть NP вопроса, но в отношении доказательства. Мало того, что доказательство стоило бы некоторый дополнительный кредит, но это решит один из проблемы Тысячелетия . Интересный опрос был недавно проведен и , опубликованные результаты (PDF) определенно стоит считать в отношении предмета доказательства.

43
задан Community 23 May 2017 в 12:10
поделиться

10 ответов

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.

62
ответ дан 26 November 2019 в 22:24
поделиться

На ваш вопрос нет настоящего ответа, кроме следующего: это зависит от обстоятельств. Это зависит от того, какую рамку (форму) вы пытаетесь создать. Я не гуру Swing, но создал пару (умеренно продвинутых) графических интерфейсов, и мне никогда не приходилось прикасаться к менеджеру GridBagLayout. Мне всегда удавалось создавать свой графический интерфейс, используя комбинацию «более простых» менеджеров компоновки. Например, вы можете присвоить своему фрейму BorderLayout, а затем поместить другой макет в ЮГ этого BorderLayout.

5
ответ дан 26 November 2019 в 22:24
поделиться

Use IntelliJ IDEA with its GUI designer. Makes GridBagLayout easy.

http://madbean.com/anim/totallygridbag/

5
ответ дан 26 November 2019 в 22:24
поделиться

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

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

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

6
ответ дан 26 November 2019 в 22:24
поделиться

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

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

После этого мы можем разделить экран на gridlayout на borderlayout. На этом рисунке мы видим СЕВЕР, ЦЕНТР, ЮГ часть (элементы BorderLayout), и макет каждой части может быть сеткой или BorderLayout, это зависит от вас. Одинаковые макеты можно использовать друг в друге.

6
ответ дан 26 November 2019 в 22:24
поделиться

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

9
ответ дан 26 November 2019 в 22:24
поделиться

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

Из данной позиции сначала сгенерируйте количество возможных позиций в детерминированная усадьба, например, начиная с нижнего левого угла до верхнего правого. Это определяет, сколько бит вам понадобится для следующего хода, в некоторых ситуациях это может быть всего один. Затем, когда делается ход, сохраняется только уникальный идентификатор этого хода.

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

Начальная позиция самая сложная и может генерировать около 250 миллионов возможных позиций (я думаю), что потребует около 28 бит плюс дополнительный бит, чтобы определить, чей это ход. недостаточно гибок для интенсивного использования.

11
ответ дан 26 November 2019 в 22:24
поделиться

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

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

22
ответ дан 26 November 2019 в 22:24
поделиться

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

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

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

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

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

17
ответ дан 26 November 2019 в 22:24
поделиться

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

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

8
ответ дан 26 November 2019 в 22:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: