JTextField расширяется по вертикали в BoxLayout - PullRequest
0 голосов
/ 11 февраля 2020

Если в BoxLayout и FlowLayout каждый компонент получает свой предпочтительный размер, почему при добавлении JTextField в JPanel с использованием BoxLayout растягивать его по вертикали, если это всего лишь «один слой»?

public void go() {
    JFrame frame = new JFrame();
    JPanel panel = new JPanel();
    JTextField field = new JTextField();

    panel.setLayout(new BoxLayout(panel,BoxLayout.Y_AXIS));
    panel.add(field);
    frame.getContentPane().add(BorderLayout.EAST,panel);
    frame.setSize(300,300);
    frame.setVisible(true);
}

Ширина текстового поля в порядке, но почему он растягивается по вертикали, если он определенно не является предпочтительной высотой? Кнопки J ведут себя не так.

1 Ответ

0 голосов
/ 11 февраля 2020

Вы устанавливаете предпочтительный размер? Вы также можете попытаться установить максимальный размер для этого предпочтительного размера. Из документов:

BoxLayout обращает внимание на запрошенные минимальные, предпочтительные и максимальные размеры компонента.

Вы можете использовать .setMaximumSize() с BoxLayout, чтобы предотвратить это. от растяжения, чтобы соответствовать. Или вы можете использовать GridBagLayout, что может быть немного сложнее, но дает вам больше возможностей.

// Setting sizes
comp.setPreferredSize(new Dimension(width, height));
comp.setMaximumSize(new Dimension(width, height));
...