Вопрос

Какой менеджер компоновки Java GUI все используют?В последнее время я использую МигЛайаут, который имеет несколько мощных элементов управления компонентами.Просто хотел посмотреть, что используют другие разработчики, кроме стандартных JDK.

Это было полезно?

Решение

МиГлайаут — это менеджер макетов графического пользовательского интерфейса, который широко используется разработчиками Java.

Другие советы

СеткаМешокМакет можно использовать.Как только вы привыкнете к нему, он будет работать отлично.Я думаю, что стандартные менеджеры макетов JDK сами по себе довольно мощны.Кроме того, вы сможете свести к минимуму зависимость от сторонних библиотек.

MiG и FormLayout (JGoodies) отлично подходят для ручной верстки (и почти вся верстка со временем становится ручной).Мой главный совет — проектируйте представления так, чтобы вы могли полностью вырвать макет и реализовать его заново, не влияя на ваше приложение (ключевое значение здесь имеет хорошее разделение представления и контроллера).

Обязательно взгляните на подход JGoodie PresentationModel для реализации «тупых» представлений.Я использую этот метод со конструктором графического интерфейса (я использую GroupLayout с плагином конструктора графического интерфейса Jigloo) для создания быстрых прототипов.После 3 или 4 итераций это обычно уходит в прошлое, и мы повторно реализуем его с помощью MiG или FormLayout.

РЕДАКТИРОВАТЬ:С тех пор, как я написал это, я перешел на использование MiG для всех своих макетов и больше не использую конструктор графического интерфейса — слишком легко компоновать вещи с помощью MiG.

Последнее приложение Swing, над которым я работал, использовало Формы JGoodiesLayout.

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

я тоже люблю совмещать ГраницаLayout с панелями GridBagLayout для большей гибкости настройки.

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

Я использую GridBagLayout для элемента управления, но начиная с java1.6 я собираюсь использовать Групповой макет Это потрясающе.

Вот скриншот и пример кода для его использования!.

альтернативный текст http://img145.imageshack.us/img145/7844/screenshot1dz8.png

    private void layoutComponents(){
        JPanel panel = new JPanel();

        GroupLayout layout = new GroupLayout(panel);
        panel.setLayout(layout);

        layout.setAutoCreateGaps(true);

        layout.setAutoCreateContainerGaps(true);
        SequentialGroup hGroup = layout.createSequentialGroup();

        JLabel nameLbl  = new JLabel("Name");
        JLabel countLbl = new JLabel("Amount");
        JLabel dateLbl  = new JLabel("Date(dd/MM/yy)");
        hGroup.addGroup(layout.createParallelGroup().
                addComponent(nameLbl).
                addComponent(countLbl).
                addComponent(dateLbl).
                addComponent(go));

        hGroup.addGroup(layout.createParallelGroup().
                addComponent(name).
                addComponent(count).
                addComponent(date));

        layout.setHorizontalGroup(hGroup);

        SequentialGroup vGroup = layout.createSequentialGroup();

        vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE).
                addComponent(nameLbl).addComponent(name));
        vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE).
                addComponent(countLbl).addComponent(count));
        vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE).
                addComponent(dateLbl).addComponent(date));
        vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE).
                addComponent(go));
        layout.setVerticalGroup(vGroup);

        frame.add( panel , BorderLayout.NORTH );
        frame.add( new JScrollPane( textArea ) );
    }

я использую ДизайнСеткаМакет для большинства моих панелей.

Для редких панелей, которые DesignGridLayout не могу полностью справиться, я использую смесь Borderlayout и DesignGridLayout.

С помощью DesigngridLayout вы можете вручную кодировать свои макеты, используя минимальное количество строк кода, которые легко набирать и читать:

DesignGridLayouut layout = new DesignGridLayout(myPanel);
layout.row().grid(lblFirstName).add(txfFirstName).grid(lblSurName).add(txfSurName);
layout.row().grid(lblAddress).add(txfAddress);
layout.row().center().add(btnOK, btnCancel);

Каждая строка сетки панели определяется одной строкой кода.Как видите, «нарисовать» вашу панель довольно просто.

Кроме того, я нахожу DesignGridLayout имеет некоторые уникальные особенности (например, "умное вертикальное изменение размера").

GridBagLayout — мощный, но довольно примитивный инструмент:код, который связывает макет, очень многословен.Эта служебная библиотека (фактически всего 1 jar-файл, содержащий около 10 классов) упрощает множество работ: http://code.google.com/p/painless-gridbag/ Следующий фрагмент цитируется с главной страницы этого сайта:

    PainlessGridBag gbl = new PainlessGridBag(getContentPane(), false);

    gbl.row().cell(lblFirstName).cell(txtFirstName).fillX()
             .cell(lblFamilyName).cell(txtFamilyName).fillX();
    gbl.row().cell(lblAddress).cellXRemainder(txtAddress).fillX();

    gbl.doneAndPushEverythingToTop();

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

Видеть http://developer.java.sun.com/developer/onlineTraining/GUI/AWTLayoutMgr

Я обнаружил, что для любого нетривиального графического интерфейса я использую несколько макетов со вложенными подпанелями, где главная панель может иметь GridBagLayout и каждая подпанель (обычно без рамки или указания на то, что это панель) использует, где это возможно, более простой макет.Обычно я использую BorderLayout, FlowLayout, и BoxLayout для небольших и простых субпанелей.Разделив небольшие разделы графического пользовательского интерфейса на подпанели и используя простейший макет для управления этим разделом графического интерфейса, вы можете создавать сложные, хорошо организованные дисплеи без лишней головной боли. GridBagLayoutмного вариантов.Кроме того, группируя функции отображения на панели, вы создаете более читаемый код.

Весенняя раскладка который был разработан для построителя пользовательского интерфейса mantissa, который является частью netbeans.

я использовал Групповой макет также.Опять же, это стандартный менеджер компоновки JDK для Java6, но вы также можете найти отдельную библиотеку.

Я всегда был большим поклонником GridBagLayout.Он во многом напоминает таблицы HTML, поэтому он интуитивно понятен веб-программистам.

Я начал использовать различные вложенные макеты, затем перешел на GridBagLayout (что меня очень расстраивает).С тех пор я попробовал FormLayout (но обнаружил, что он не подходит ни для чего, кроме форм) и твердо остановился на TableLayout, которым в целом я очень доволен.

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

Большим плюсом для меня является то, что MiGLayout станет частью JDK, поэтому я намерен использовать его практически исключительно, когда это произойдет.

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

Я предпочитаю минимизировать зависимости от сторонних библиотек, поэтому обычно это BoxLayout для диалогов и GridBagLayout для «сложных» макетов.GridBagLayout достаточно прост для понимания, но немного сложен в настройке.Я написал себе инструмент для создания кода из HTML-макетов (надеюсь, это поможет и другим):http://www.onyxbits.de/content/blog/patrick/java-gui-building-gridbaglayout-manager-made-easy

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

я использую ГраницаLayout 90% времени во время гнездования BoxLayout и SpringLayout

Я немного новичок в Java.

Попробовал GridBagLayout, сдался, потом попробовал BoxLayout, потом сдался, а потом сделал свой. Пользовательский макет что сработало.С GridBag и Box я приложил все усилия, и движки Layout решили сделать что-то другое, без какого-либо очевидного способа их отладки.

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

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

Я использую GridBagLayout для форм, подобных макетам, BorderLayout для простых макетов и FlowLayout для количества горизонтальных значков/кнопок, между которыми есть пробелы.Netbeans также является хорошим конструктором графического пользовательского интерфейса, который позволяет избежать множества утомительных кодов макета и сэкономить ваше время.

Недавно я начал использовать Swing и использую GridBagLayout.

Мне надоели все эти менеджеры макетов, которые требовали много настроек, были не очень читабельны и не утомительны для выполнения вручную, поэтому я написал свой собственный очень простой менеджер макетов, который использует абстракцию двух фотоуглов, удерживающих каждый компонент на месте.Вы можете добавить свой компонент следующим образом: parent.add(child,"topleft(0, 0.5)bottomright(0.5,1.0)");

Посмотрите здесь https://github.com/hageldave/UsefulStuff/blob/master/src/PhotoCornersLayout.java ;) Вы сами отвечаете за правильную макет, потому что это не проверяет перекрытия или другие короткие смыкания вашего макета.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top