Вопрос

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

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

Я почти там, используя Growplayout:

  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, выровненной влево, с двумя другими. Я не могу понять, как я могу указать выравнивание только на одной кнопке. Я могу сделать GroouPlayout.Alignment.Tailing на всей панели кнопки, но это ударяет все 3 кнопки, что также не совсем правильно.

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

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

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

Решение

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

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)
  );

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

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

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

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

после второй кнопки. Max_Value приведет к тому, что разрыв будет расширяться как необходимо.

Вы хотите использовать 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 )
    );
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top