Какой менеджер раскладки вы используете? - PullRequest
18 голосов
/ 22 сентября 2008

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

Ответы [ 22 ]

17 голосов
/ 23 сентября 2008

MiGLayout - менеджер компоновки GUI, который широко используется разработчиками Java.

9 голосов
/ 22 сентября 2008

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

7 голосов
/ 23 сентября 2008

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

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

РЕДАКТИРОВАТЬ: С тех пор, как я написал это, я перешел на использование MiG для всех своих макетов, и я больше не использую GUI Builder - слишком просто выложить вещи с помощью MiG.

5 голосов
/ 06 января 2009

Я использую DesignGridLayout для большинства моих панелей.

Для редких панелей, с которыми 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 обладает некоторыми уникальными функциями (такими как « интеллектуальное вертикальное изменение размера »).

5 голосов
/ 22 сентября 2008

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

5 голосов
/ 23 сентября 2008

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

5 голосов
/ 22 сентября 2008

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

Мне также нравится комбинировать BorderLayout с панелями GridBagLayout для большой настраиваемости.

5 голосов
/ 02 декабря 2008

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

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

альтернативный текст 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 ) );
    }
3 голосов
/ 02 ноября 2009

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();
2 голосов
/ 23 сентября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...