カスタムを作成しようとしていますJDialog
。コンポーネントを好みの高さで積み重ねたいのですが、幅はコンテナを埋める必要があります。LinearLayout
Android に似ています。ウィンドウのサイズが変更されたときに、コンポーネントが適切な高さを維持するようにします。
シナリオ:いくつかのコンポーネントを自然なサイズでコンパクトに並べて表示する必要があります。
JPanel を使用してコンポーネントをグループ化し、JPanel のデフォルトの FlowLayout マネージャーまたは BoxLayout マネージャーのいずれかを使用することを検討してください。これには SpringLayout も適しています。
たとえば、 a のJTextField
上に aが必要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();
}
}