请参阅下面的图片,显示我正在处理的GUI的一小部分。以下是生成它的代码。除了一件事,这个GUI几乎就是我想要的。我希望第二行中的JTextField
只有它的宽度的1/3并且锚定在左侧。因此,它将直接位于其上方的第一个JTextfield
下方且与其完全相同。并且,当帧在水平方向上重新调整大小时,它必须保持这种位置和大小关系。
那么,当水平尺寸发生变化时,如何添加始终与行的右2/3相对应的隐形填充?在这个时候,我并不关心垂直重新调整大小的行为。
感谢。
import java.awt.*;
import javax.swing.*;
public class BoxTest {
private static void createAndShowGui() {
Dimension comboBoxSize = new Dimension(70,30);
JComboBox comboBox1 = new JComboBox(new String[]{"A", "B", "C"});
JComboBox comboBox2 = new JComboBox(new String[]{"D", "E", "F"});
JComboBox comboBox3 = new JComboBox(new String[]{"G", "H", "I"});
JComboBox comboBox4 = new JComboBox(new String[]{"J", "K", "L"});
comboBox1.setPreferredSize(comboBoxSize);
comboBox2.setPreferredSize(comboBoxSize);
comboBox3.setPreferredSize(comboBoxSize);
comboBox4.setPreferredSize(comboBoxSize);
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(650, 400);
JPanel boxPanel = new JPanel();
BoxLayout bl0 = new BoxLayout(boxPanel, BoxLayout.Y_AXIS);
boxPanel.setLayout(bl0);
JPanel row1Panel = new JPanel(new BorderLayout());
JPanel hBox1 = new JPanel();
BoxLayout bl1 = new BoxLayout(hBox1, BoxLayout.X_AXIS);
hBox1.setLayout(bl1);
JTextField t1 = new JTextField(15);
JTextField t2 = new JTextField(15);
JTextField t3 = new JTextField(15);
hBox1.add(t1);
hBox1.add(t2);
hBox1.add(t3);
row1Panel.add(comboBox1, BorderLayout.WEST);
row1Panel.add(comboBox2, BorderLayout.EAST);
row1Panel.add(hBox1, BorderLayout.CENTER);
boxPanel.add(row1Panel);
JPanel row2Panel = new JPanel(new BorderLayout());
JPanel hBox2 = new JPanel();
BoxLayout bl2 = new BoxLayout(hBox2, BoxLayout.X_AXIS);
hBox2.setLayout(bl2);
JTextField t4 = new JTextField(15);
hBox2.add(t4);
row2Panel.add(comboBox3, BorderLayout.WEST);
row2Panel.add(comboBox4, BorderLayout.EAST);
row2Panel.add(hBox2, BorderLayout.CENTER);
boxPanel.add(row2Panel);
frame.add(boxPanel);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
createAndShowGui();
}
});
}
}
答案 0 :(得分:3)
我可能会尝试类似的事情:
答案 1 :(得分:0)
您可以使用GridBagLayout为您的hBox2更好地调整GridBagConstraints并使用约束来强制1/3感觉。最后我能想到的是你可以改进整体布局并尝试GroupLayoutManager。 A Visual Guide to Layout Managers是使用Swing布局管理器的教程的良好来源。此外,在组件上强制preferred大小要求布局管理器很挑剔。