Размер зазора после размещения JSeparator в Java Swing - PullRequest
3 голосов
/ 21 июля 2011

У меня есть простая проблема здесь, в Java Swing. Я упростил свой код до следующего фрагмента. Я не уверен, как я могу минимизировать размер разрыва между горизонтальным JSeparator с помощью следующего JTextField, так как текущий код генерирует огромный разрыв между ними.

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

        layout.setHorizontalGroup(layout.createParallelGroup()
            .addGroup(layout.createSequentialGroup()
                  .addGroup(layout.createSequentialGroup()
                        .addComponent(button)
                      ))
                  .addComponent(jSeparator)
                  .addComponent(jTextField)
            );
        layout.setVerticalGroup(layout.createSequentialGroup()
                .addComponent(button)
                .addComponent(jSeparator)
                .addComponent(jTextField)
            );  

И вообще, как я могу контролировать размер промежутка для любого целочисленного значения вместо использования addPreferredGap?

Спасибо.

Хорошо, это окно, сгенерированное из кода, размещенного выше: enter image description here

Вы можете видеть, что пространство между JSeparator и JTextField очень велико.

Ответы [ 2 ]

3 голосов
/ 21 июля 2011

Отсутствует ваша sscce , проблема заключается в коде, который вы не показываете.Возможно использование макета родительского контейнера или pack().Обратите внимание, что по умолчанию макет JFrame равен BorderLayout;положение по умолчанию CENTER.Вот sscce , с которым вы можете сравнить ваш код.

Добавление: комментируя, что родителем вашей GroupLayout панели является другой JPanel, вы спросили следующее:

Знаете ли вы, как заставить это работать в моей ситуации?

Да, дайте приложению JPanel подходящую компоновку, например, GridLayout, как показано ниже.Последний ведет себя очень похоже на BorderLayout.CENTER из JFrame в этом отношении.

GroupPanel

import java.awt.EventQueue;
import java.awt.GridLayout;
import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSeparator;
import javax.swing.JTextField;

/** @see http://stackoverflow.com/questions/6769722 */
public class GroupPanel extends JPanel {

    private final JButton button = new JButton("Start");
    private final JSeparator jSeparator = new JSeparator();
    private final JTextField jTextField = new JTextField(10);

    public GroupPanel() {
        GroupLayout layout = new GroupLayout(this);          
        this.setLayout(layout);
        layout.setAutoCreateGaps(true);
        layout.setAutoCreateContainerGaps(true);
        layout.setHorizontalGroup(layout.createParallelGroup()
            .addComponent(button)
            .addComponent(jSeparator)
            .addComponent(jTextField)
        );
        layout.setVerticalGroup(layout.createSequentialGroup()
            .addComponent(button, GroupLayout.PREFERRED_SIZE,
                GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
            .addComponent(jSeparator, GroupLayout.PREFERRED_SIZE,
                GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
            .addComponent(jTextField, GroupLayout.PREFERRED_SIZE,
                GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
        );
    }

    private static void display() {
        JFrame f = new JFrame("GroupPanel");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setLayout(new GridLayout(1, 0));
        f.add(new GroupPanel());
        f.add(new GroupPanel());
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                display();
            }
        });
    }
}
2 голосов
/ 13 января 2012

в вертикальной компоновке, добавьте разделитель следующим образом:

addComponent(separator, GroupLayout.PREFERRED_SIZE,
             GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
...