Интервал управления в Swing - PullRequest
3 голосов
/ 19 июня 2010

Существуют ли руководящие указания относительно того, сколько элементов управления пространством в Swing должно быть вокруг них?Также возникает вопрос, как именно этого добиться: некоторые менеджеры по расположению поддерживают разрывы между элементами управления;некоторые этого не делают, тогда как вам придется использовать EmptyBorder - что также может быть неприятно, поскольку границы не перекрываются, и вы можете получить слишком много места между двумя элементами управления 1 - так что выможет потребоваться пропустить одну сторону границы.

Еще одна проблема заключается в том, как выглядят и чувствуют: если я использую явные пробелы или границы, это может выглядеть хорошо в одном LAF, но плохо в другом.Например, Nimbus отлично смотрится с тесными кнопками, так как вокруг них есть дополнительное пространство.Windows LAF по умолчанию просто объединяет их без лишних пробелов.Я понимаю, что это является по существу проблемой платформы, поскольку у Microsoft, Apple, Gnome и других у всех разные рекомендации по этой теме .

Так что, если я тогда добавлю дополнительныерасстояние между элементами управления для размещения Windows или Metal LAF слишком велико в Nimbus и, возможно, в других.

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

Короче говоря: Как я могу убедиться, что элементы управления расположены правильно и подходят для LAF, не слишком многохлопот? Может быть, я просто что-то упускаю из виду - с огромным размером Swing, что не исключено.


1 По крайней мере, для меня это было проблемой -может быть, является жизнеспособным решением.Но учитывая простой случай размещения двух элементов управления рядом друг с другом, и вы хотите, возможно, пустоту в пять пикселей вокруг них - между , их также всего пять пикселей, а не десять.Я не вижу способа, как это должно сработать в общем случае, не создавая разные границы в зависимости от направления письма (поскольку левые и правые не обязательно, где идут элементы управления, но, видимо, всегда, где границы).

Ответы [ 4 ]

2 голосов
/ 20 июня 2010

Такого рода рекомендации зависят как от платформы, так и от внешнего вида.

Вы можете использовать javax.swing.LayoutStyle служебные методы, чтобы выяснить, какой интервал следует использовать между компонентом иего встраиваемая панель или между двумя компонентами.

Однако это довольно громоздко.

Вы можете рассмотреть возможность использования LayoutManager, который напрямую поддерживает это для вас.Некоторые предлагают MigLayout, вы также можете взглянуть на DesignGridLayout , который делает межкомпонентное пространство полностью прозрачным для разработчика.

С такими LayoutManager вы НИКОГДА не должны устанавливать какие-либо измерения или вставки самостоятельноно позвольте им выполнить эту работу за вас.

Кроме того, выбор правильного PLAF важен, потому что расстояние может меняться в зависимости от разрешения вашего монитора (у вас могут быть некрасивые поведения на экранах Hi-DPI, если онине поддерживаются выбранным PLAF).

Я не могу перечислить, какие PLAF не зависят от разрешения (т.е. знают, как обращаться с устройствами HiDPI), но Вещество , безусловно, одноиз них и очень хороший PLAF в целом.

1 голос
/ 19 июня 2010

Я решил эту проблему с помощью MigLayout , в котором имеются пробелы, зависящие от платформы.Кроме того, он предоставляет другие зависящие от платформы функции, такие как размеры кнопок и последовательности.

Очень рекомендую!

0 голосов
/ 19 июня 2010

Я чувствую, что ваш вопрос меньше о как в космосе и больше о когда и сколько в космосе. Руководства по проектированию Java Look and Feel от Sun Oracle, 4: Визуальный дизайн , сосредоточены на логической группировке с ограниченным использованием названных границ.Вот конкретный пример из игры .

0 голосов
/ 19 июня 2010

Для всех L & F и всех макетов вы не можете быть уверены: это цель l & f и макета, а не ваша.

Обычно в свинг-приложении разработчик выбирает макет, а пользователь выбирает l & f.

Компоновка никогда не меняет границ (это часть композиции), но они могут менять вставки. Поэтому используйте комбинацию вашего макета, границы и вставок.

BoxLayout имеет понятие Наполнитель и RigidArea : см. Использование невидимых компонентов в качестве наполнителя .

SpringLayout имеет ограничение . См. Как использовать SpringLayout .

GroupLayout использует пробелы . Вы можете прочитать Как использовать GroupLayout . GroupLayout очень и очень сложен вручную, но очень легко с matisse в netbeans.

...