Что не так с Null Layout в Java?
Bonjour.
Потратив бесчисленное количество часов вокруг этого сайта в поисках кода для перетаскивания компонента по экрану, я заметил странную тенденцию в ответах.
... в том, что все вздрагивают при звуке нулевого макета.
Поэтому я спрашиваю, в чем проблема у всех? Я кодирую не более трех месяцев, использую Swing не более одного раза, и верстка удобна для использования с бесконечной возможной настройкой. Почему это плохая практика?
4 ответа
Основная проблема заключается в сложностях, связанных с попыткой определить отдельные платформы в отношении таких вещей, как шрифты и способ отображения пикселей.
Даже две системы, работающие в одной и той же ОС, могут генерировать разные выходные данные из-за разных драйверов оборудования и конвейеров рендеринга.
Большая часть API была абстрагирована настолько, что вам никогда не следует беспокоиться о том, что один ПК использует DPI 120 и DirectX, а другой - DPI 92 и OpenGL.
Менеджеры макетов снимают с разработчика ответственность за необходимость расчета размера компонента (и его дочерних компонентов) в определенный момент времени, а также за расчет отношений между этими компонентами и выполнение этого стандартным образом.
Ядро Swing API было разработано для использования этого API, поэтому, когда компонент изменяется каким-либо образом, который представляет изменение в размере, все необходимые контейнеры уведомляются автоматически, и вся иерархия компонентов может быть скорректирована в соответствии с требованиями.
Основная идея менеджера компоновки состоит в том, чтобы описать отношения между компонентами в одном и том же контейнере, а также предоставить информацию о том, сколько может иметь этот контейнер. Это позволяет вам сосредоточиться на отслеживании пользовательских возможностей пользовательского интерфейса, а не пытаться тратить время на попытки обновить пользовательский интерфейс для удовлетворения всех возможных комбинаций аппаратного и программного обеспечения.
Как бывший разработчик VB (нет, я не горжусь этим), я могу заверить вас, что самая разочаровывающая часть работы с ним заключалась в разработке полезных динамических интерфейсов, которые не выглядели дерьмом на следующей клиентской машине.
Из всех аспектов Swing управление версткой является одним из самых желанных - ИМХО
Потому что это не макет. Все, что вы делаете, - это используете графический редактор для размещения ваших компонентов в абсолютных местах. Изменение размера окна или запуск кода под другим разрешением монитора будет выглядеть ужасно.
ищу код для перетаскивания компонента по экрану
Это другое требование. По определению, когда вы перетаскиваете компонент по экрану, вы не можете запрограммировать местоположение.
Сказав, что менеджер компоновки делает больше, чем просто устанавливает местоположение компонента. Проверьте Drag Layout для макета, который вы все еще можете использовать в этой ситуации.
Для других ситуаций менеджер компоновки (или комбинация вложенных менеджеров компоновки) - лучшее решение для разработки эффективных графических интерфейсов.
Вы потеряете некоторые баллы за GUI за его использование, потому что его сложно поддерживать, больше кода, меньше гибкости,... Добавление дополнительной кнопки приведет к большому пересчету, который вам придется сделать.
Как я это вижу: http://leepoint.net/notes-java/GUI/layouts/nulllayout.html