あなたのアイデアは良いものです。複合レイアウトを使用すると、複数のコンポーネントを簡単にレイアウトできますが、レイアウト マネージャーの選択が少し間違っていました。
の性質BorderLayout
は、使用可能なすべてのスペースを使用してコンポーネントをレイアウトすることです。
GridBagLayout
代わりに次のようなものを使用してみてください
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class BadLayout12 {
public static void main(String[] args) {
new BadLayout12();
}
public BadLayout12() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
private JButton button1;
private JLabel label1;
private JTextField field1;
private JPanel panel1;
private JPanel panel2;
private JPanel panel3;
private JTextArea area1;
int i = 0;
int j = 0;
private JScrollPane pane;
public TestPane() {
// this.petList = petList;
// this.sPanel = sPanel;
button1 = new JButton("Test");
field1 = new JTextField(10);
label1 = new JLabel("Test");
panel1 = new JPanel(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
panel1.add(label1, gbc);
gbc.gridx++;
panel1.add(field1, gbc);
gbc.gridx = 0;
gbc.gridy++;
gbc.gridwidth = 2;
panel1.add(button1, gbc);
panel2 = new JPanel();
area1 = new JTextArea(10, 20);
panel2.add(new JScrollPane(area1));
panel3 = new JPanel();
panel3.setLayout(new BorderLayout(5, 5));
panel3.add(panel1, BorderLayout.WEST);
panel3.add(panel2, BorderLayout.EAST);
this.add(panel3);
}
}
}
を見てみましょう;
詳細については