内側のボーダー レイアウトがパネルを中央に保持する 2 つのネストされたボーダー レイアウトを作成したいと思います。このパネルには垂直方向の流れがあり、特定のコンポーネントが成長し、利用可能なすべてのスペースを一緒に使用する必要があります。最終的に、このパネルは でラップする必要があるJScrollPane
ため、すべてをデフォルト サイズで表示できない場合は常に垂直スクロールバーが表示されます。次のようなもの:
+-------------------------------+
| |
| +-----------------------+ |
| | don't grow | |
| +-----------------------+ |
| |
| +-----------------------+ |
| | | |
| | growy | |
| | | |
| +-----------------------+ |
| |
| +-----------------------+ |
| | don't grow | |
| +-----------------------+ |
| |
| +-----------------------+ |
| | | |
| | growy | |
| | | |
| +-----------------------+ |
| |
+-------------------------------+
これは私が得た距離です:
次の SSCCE が提供されます。
public class SimpleMain {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
//createAndShowMigGUI();
createAndShowSwingGUI();
}
});
}
private static void createAndShowSwingGUI() {
JFrame frame = new JFrame("Swing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
/* Frame */
frame.setLayout(new BorderLayout());
/* Outer Panel */
JPanel outerPanel = new JPanel(new BorderLayout());
outerPanel.add(new JTextField("inner north"), BorderLayout.NORTH);
outerPanel.add(new JTextField("inner south"), BorderLayout.SOUTH);
outerPanel.add(new JTextField("inner west"), BorderLayout.WEST);
outerPanel.add(new JTextField("inner east"), BorderLayout.EAST);
/* Text Area */
JTextArea area = new JTextArea("aHJAskjdhuyawduyawd Askjdhuyawduyawd Askjdhuyawduyawd AskjdhuyawduyawdHJAskjdhuyawduyawd Askjdhuyawduyawd Askjdhuyawduyawd AskjdhuyawduyawdHJAskjdhuyawduyawd Askjdhuyawduyawd Askjdhuyawduyawd AskjdhuyawduyawdHJAskjdhuyawduyawd Askjdhuyawduyawd Askjdhuyawduyawd AskjdhuyawduyawdHJAskjdhuyawduyawd Askjdhuyawduyawd Askjdhuyawduyawd Askjdhuyawduyawd");
area.setLineWrap(true);
area.setWrapStyleWord(true);
/* Elements Container */
JPanel innerPanel = new JPanel(new GridBagLayout());
/* Grid Bag Constraints */
GridBagConstraints cons = new GridBagConstraints();
cons.fill = GridBagConstraints.HORIZONTAL;
cons.weightx = 1;
cons.gridx = 0;
/* Elements */
innerPanel.add(area, cons); // This component should use all available Y-space
innerPanel.add(new JRadioButton("Test hello"), cons); // Remain as-is
innerPanel.add(new JTextField("some text field..."), cons); // Remain as-is
innerPanel.add(new JTextField("some text field PUSH..."), cons); // This component should use all available Y-space
/* Add Inner Panel To Outer Panel */
outerPanel.add(new JScrollPane(innerPanel), BorderLayout.CENTER);
/* Add outer elements */
frame.getContentPane().add(new JTextField("outer north"), BorderLayout.NORTH);
frame.getContentPane().add(new JTextField("outer south"), BorderLayout.SOUTH);
frame.getContentPane().add(new JTextField("outer west"), BorderLayout.WEST);
frame.getContentPane().add(new JTextField("outer east"), BorderLayout.EAST);
frame.getContentPane().add(outerPanel, BorderLayout.CENTER);
frame.setSize(800, 600);
frame.setVisible(true);
frame.setLocation(40, 40);
}
}