Я пытаюсь создать кастом JDialog
. Я хотел бы разместить компоненты друг над другом с их предпочтительной высотой, но ширина должна заполнять контейнер. Аналогично LinearLayout
в Android. Я хочу, чтобы компоненты сохраняли предпочтительную высоту при изменении размера окна.
С Использование менеджеров по расположению :
Сценарий: Вам необходимо отобразить несколько компонентов в компактном ряду в их натуральном размере.
Рассмотрите возможность использования JPanel для группировки компонентов и использования менеджера FlowLayout по умолчанию в JPanel или менеджера BoxLayout. SpringLayout также хорош для этого.
например. Я хотел бы иметь JTextField
выше JTabbedPane
. Я пытался использовать все предложенные менеджеры компоновки FlowLayout, BoxLayout, SpringLayout, но они не сохраняют естественный размер моих компонентов, когда окно JDialog
увеличивается по высоте.
Есть ли в Java Swing менеджер компоновки, который я могу использовать в своей ситуации?
Вот небольшой пример, который показывает мою проблему с макетами Swing:
import javax.swing.BoxLayout;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
public class TestDialog extends JDialog {
public TestDialog() {
setLayout(new BoxLayout(this.getContentPane(), BoxLayout.PAGE_AXIS));
//setLayout(new SpringLayout());
JTextField field1 = new JTextField();
JTextField field2 = new JTextField();
JTextField field3 = new JTextField();
JTextField field4 = new JTextField();
JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();
panel1.setLayout(new BoxLayout(panel1, BoxLayout.PAGE_AXIS));
panel2.setLayout(new BoxLayout(panel2, BoxLayout.PAGE_AXIS));
panel1.add(field2);
panel2.add(field3);
panel2.add(field4);
JTabbedPane tabs = new JTabbedPane();
tabs.addTab("Tab 1", panel1);
tabs.addTab("Tab 2", panel2);
add(field1);
add(tabs);
//field1.setMaximumSize(field1.getPreferredSize());
//SpringUtilities.makeCompactGrid(this.getContentPane(), 2, 1, 2, 2, 2, 2);
this.pack();
this.setVisible(true);
}
public static void main(String[] args) {
new TestDialog();
}
}