Java - Как изменить размер компонентов в GroupLayout - PullRequest
1 голос
/ 27 февраля 2012

У меня проблема с GroupLayout . Мой код:

public chat () {

        JTextField chatbox;
        JTextField msgbox;
        JButton sendbutton;
        GroupLayout layout;

        super();
        chatbox = new JTextField();
        msgbox = new JTextField();
        sendbutton = new JButton("Send");
        layout = new GroupLayout(this);

        sendbutton.setPreferredSize(new Dimension(60, 20));

        setBackground(new Color(255, 255, 255));

        setLayout(layout);
        layout.setAutoCreateGaps(true);
        layout.setAutoCreateContainerGaps(true);

        layout.setHorizontalGroup(layout.createParallelGroup()
            .addComponent(chatbox)
            .addGroup(layout.createSequentialGroup()
                .addComponent(msgbox)
                .addComponent(sendbutton))
        );

        layout.linkSize(SwingConstants.HORIZONTAL, sendbutton);

        layout.setVerticalGroup(layout.createSequentialGroup()
            .addComponent(chatbox)
            .addGroup(layout.createParallelGroup()
                .addComponent(msgbox)
                .addComponent(sendbutton))
        );
}

И проблема в том, что компоненты в Layout настолько большие, насколько они могут. Я не могу ограничить этот размер. Вопрос в том, как установить, например, постоянную высоту для элемента?

Или, с другой стороны, какая функция вызывается при изменении размера окна? Мэйби, я могу переопределить эту функцию, получить размер родительского JPanel (его в JPanel), а затем установить размер в процентах? Что ты думаешь?

// проблема решена.

в пятой строке от нижнего изменения

.addGroup(layout.createParallelGroup()

для

.addGroup(layout.createParallelGroup(BASELINE)

спасибо всем за помощь.

Ответы [ 2 ]

0 голосов
/ 22 сентября 2013

Я добавляю это, потому что на первый взгляд ответ не так ясен, как мог бы быть, хотя он действительно хорошо ответил на мою собственную версию этого вопроса: -)

В основном, при созданиивертикальная группа в GroupLayout. Если вы хотите, чтобы компоненты были на их предпочтительной высоте (по большей части), вы можете добавить аргумент GroupLayout.Alignment.BASELINE.

Я бы объяснил аргумент BASELINE, нодокументация Oracle (http://docs.oracle.com/javase/7/docs/api/javax/swing/GroupLayout.ParallelGroup.html) делает работу намного лучше:

Базовая линия рассчитывается на основе предпочтительной высоты каждого из элементов, имеющих базовую линию. Базовая линия рассчитывается с использованиемследующий алгоритм: max (maxNonBaselineHeight, maxAscent + maxDescent), где maxNonBaselineHeight - это максимальная высота всех элементов, которые не имеют базовой линии или не выровнены вдоль базовой линии.

Как указали другие, setMaximumSize () не должен использоваться, и я бы посоветовал проверить ссылку @kleopatra упоминаниеd для получения дополнительной информации.

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

.addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)

, а не

.addGroup(layout.createParallelGroup(BASELINE)
0 голосов
/ 28 февраля 2012

setMaximumSize () в ваших компонентных объектах.

...