Смешанное выравнивание с GroupLayout Java Swing - PullRequest
8 голосов
/ 19 апреля 2010

Я пытаюсь построить окно GUI в моем приложении. То, что я пытаюсь сделать, это иметь окно с несколькими кнопками вверху и большой текстовой областью. Примерно так:

+--------------------------------------------------+
| [button1] [button2]                    [button3] |
| +----------------------------------------------+ |
| | text area                                    | |
| |                                              | |
| |                                              | |
| |                                              | |
| +----------------------------------------------+ |
+--------------------------------------------------+

Я почти на месте, использую GroupLayout:

  layout.setHorizontalGroup(
    layout.createParallelGroup()
      .addGroup(layout.createSequentialGroup()
        .addComponent(button1)
        .addComponent(button2))
        .addComponent(closeWindow))
      .addComponent(textarea1)
  );

  layout.setVerticalGroup(
    layout.createSequentialGroup()
      .addGroup(layout.createParallelGroup()
        .addComponent(button1)
        .addComponent(button2)
        .addComponent(button3))
      .addComponent(textarea)
  );

Проблема в том, что это заканчивается тем, что кнопка 3 выровнена влево, а остальные две. Я не могу понять, как я могу указать выравнивание только на этой одной кнопке. Я могу сделать GroupLayout.Alignment.TRAILING на всей панели кнопок, но это касается всех 3 кнопок, что тоже не совсем правильно.

Так какой правильный подход? Поскольку выравнивание применимо только к параллельным группам, я не думаю, что наличие горизонтальной группы с двумя последовательными группами поможет?

Чего мне не хватает?

Ответы [ 3 ]

11 голосов
/ 20 апреля 2010

Добавьте пробел в вашей последовательной группе. Оставить вашу горизонтальную группу как есть:

layout.setVerticalGroup(
    layout.createSequentialGroup()
      .addGroup(layout.createParallelGroup()
        .addComponent(button1)
        .addComponent(button2)
        .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        .addComponent(button3))
      .addComponent(textarea)
  );

Разрыв с этими параметрами действует как «пружина», занимая все доступное пространство.

3 голосов
/ 20 апреля 2010

Попробуйте добавить:

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 1, Short.MAX_VALUE)

после второй кнопки. MAX_VALUE приведет к увеличению разрыва до необходимого.

1 голос
/ 27 августа 2014

Вы хотите использовать addPreferredGap (), который доступен только для последовательных групп. Приведенный ниже код дает вам желаемый макет.

    layout.setHorizontalGroup(
            layout.createParallelGroup()
                    .addGroup( layout.createSequentialGroup()
                            .addComponent( button1 )
                            .addComponent( button2 )
                            .addPreferredGap( LayoutStyle.ComponentPlacement.RELATED, GroupLayout.PREFERRED_SIZE, Short.MAX_VALUE )
                            .addComponent( button3 ) )
                    .addComponent( textArea )
    );
    layout.setVerticalGroup(
            layout.createSequentialGroup()
                    .addGroup( layout.createParallelGroup()
                            .addComponent( button1 )
                            .addComponent( button2 )
                            .addComponent( button3 ) )
                    .addComponent( textArea )
    );
...