Что я пытаюсь сделать
В Swing я пытаюсь использовать BoxLayout
или эквивалентный линейный контейнер, но элементы в контейнере растягиваются вертикально. Внутри моего приложения я не хочу, чтобы они растягивались вертикально.
Я знаю, что мог бы установить предпочитаемый размер или максимальный размер для компонентов, но следующий код является всего лишь средством воспроизведения, и я не могу жестко кодировать или максимизировать размер компонентов, которые в действительности более сложны и динамический . И я просто не могу использовать BorderLayout
с позицией BorderLayout.TOP
, потому что никакие полосы прокрутки не будут отображаться, если я это сделаю. И мне могут понадобиться полосы прокрутки.
Что я пробовал
Поэтому я попытался использовать fillers
в 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);
}
}
Что бы я хотел сделать
Кто-нибудь знает, как я могу исправить эти наполнители и заставить их работать? Исправление в данном коде было бы фантастическим.
Это рисунок, который я сделал с использованием краски, который показывает, что я хотел бы получить в результате: