2011-11-20 2 views
2

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

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

+1

Что вы хотите сделать, так это избежать любого менеджера компоновки. Точка менеджера компоновки заключается в том, чтобы компоненты были правильно расставлены независимо от внешнего вида, шрифтов и т. Д. Использование абсолютных координат поражает цель менеджера компоновки. Узнайте, как их использовать: это хорошая вещь. –

+0

@JB Nizet Я, очевидно, новичок в качелях.В любом случае, есть ли простой способ добавить компонент вместе с координатами, в которых вы хотите? – snotyak

ответ

1

Сделайте оба. Попробуйте WindowBuilder в Eclipse. Он обеспечивает двухстороннюю разработку и создание кода.

+0

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

+0

Вы все еще можете это сделать. WindowBuilder просто берет gruntwork из генерации графических интерфейсов. Выложите его визуально, вручную настройте код и загрузите его обратно в WindowBuilder, если хотите. Обычно я не делаю третьего шага, но вариант есть, особенно для быстрой проверки работоспособности. – Dave

+0

Я установил это. Очень полезно. В конце концов я использовал это вместе с другим предложением. – snotyak

5

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

Вы можете найти this page полезный как список подсказок для правильного выбора менеджера макетов.

Обратите внимание, что каждый менеджер компоновки имеет свои причуды в Swing, поэтому переход от одного менеджера макета к другому может привести к некоторым небольшим неприятностям. Например, некоторые из них соответствуют минимальному/максимальному размеру, некоторые нет, и т. Д.

К вашему резюме: вы не должны пытаться установить координаты «вручную». Хотя это возможно, гораздо лучше выразить логическую связь между визуальными элементами. Это поможет вам значительно изменить размер страницы, решить проблему локализации, правильное вложение и извлечение элементов управления, а также во многих других местах, которые я не помню на данный момент.

1

Специальные координаты (т. Е. С использованием NullLayout) - это всегда плохая идея. Классы LayoutManager всегда должны использоваться для обработки вашего размещения компонентов, поскольку он будет обрабатывать все типы событий, которые вы не должны обрабатывать (например, вычислять новые координаты при изменении размера контейнера).

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

Другое LayoutManager существует, каждый из которых имеет сильные и слабые стороны (например, Flow Layout, MigLayout, BoxLayout). В зависимости от ваших потребностей некоторые менеджеры могут быть слишком простыми или чрезмерными. Вы должны попробовать и изучить многие из них, чтобы вы могли найти подходящий для своих нужд.

+0

Мой GUI должен использоваться для демонстрации для моего класса, так что в основном это будет анимация. Мне нужно динамически создавать/удалять объекты с экрана. Я еще попробую GridBagLayout. – snotyak

+0

@chickeneaterguy Для всех классов «LayoutManager» можно динамически создавать/удалять объекты из контейнеров. Ваши «потребности» следует интерпретировать как сложный вариант вашего графического интерфейса, количество объектов, которые вы должны отображать, уровень контроля над размещением компонентов с помощью ограничений, которые вы хотите. – Laf

2

Взгляните на CoordinateLayout:

Позволяет выложив компонентов на основе абсолютных позиций/размеров, которые адаптированы на основе свободного пространства для макета.

Смежные вопросы