То, что я пытаюсь сделать
В Swing я пытаюсь использовать BoxLayout
или эквивалентный линейный контейнер, но предметы в контейнере растягиваются по вертикали. Внутри моего приложения я не хочу, чтобы они растягивались по вертикали.
Я знаю, что могу установить предпочтительный размер или максимальный размер для компонентов, но следующий код - это просто средство воспроизведения, и я не могу жестко кодировать или максимизировать размер компонентов, которые на самом деле являются более сложными и динамическими . И я просто не могу использовать BorderLayout
с позицией BorderLayout.TOP
, потому что полосы прокрутки никогда не будут отображаться, если я это сделаю. И мне могут понадобиться панели прокрутки.
Что я пробовал
Итак, я попытался использовать заполнители
в BoxLayout
, как описано в Использование невидимых компонентов в качестве заполнителя , но это просто не работает. Хотя в документации Oracle это казалось именно тем, что мне нужно. Вот мои попытки:
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
public class TestBoxLayout implements Runnable {
public static void main(String[] args) {
SwingUtilities.invokeLater(new TestBoxLayout());
}
@Override
public void run() {
JFrame f = new JFrame("test box layout");
JPanel b = new JPanel();
b.setLayout(new BoxLayout(b, BoxLayout.PAGE_AXIS));
b.add(new JTextField("field 1"));
b.add(new JTextField("field 2"));
b.add(new JTextField("field 3"));
b.add(Box.createVerticalGlue());
f.setContentPane(b);
f.setSize(500, 200);
f.setVisible(true);
}
}
Вот результат, который я получил:
Вторая попытка
Я попытался использовать класс Box вместо JPanel
с BoxLayout
, но визуальный результат точно такой же. Вот моя вторая попытка:
import javax.swing.Box;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
public class TestBox implements Runnable {
public static void main(String[] args) {
SwingUtilities.invokeLater(new TestBox());
}
@Override
public void run() {
JFrame f = new JFrame("test box");
Box b = Box.createVerticalBox();
b.add(new JTextField("field 1"));
b.add(new JTextField("field 2"));
b.add(new JTextField("field 3"));
b.add(Box.createVerticalGlue());
f.setContentPane(b);
f.setSize(500, 200);
f.setVisible(true);
}
}
Что бы я хотел сделать
Кто-нибудь знает, как я могу исправить эти наполнители и заставить их работать? Исправить данный код было бы просто фантастически.
Это рисунок, который я сделал с помощью краски, он показывает, что я хотел бы получить в результате: