【发布时间】:2013-08-26 10:48:04
【问题描述】:
我有一个简单的 GUI,我正在尝试为窗口左侧创建按钮和控件。右侧有一个文本区域,最终将显示内容。左侧包含供用户操作的按钮和控件。我使用了一组布局管理器(而且它们似乎相当挑剔)来制作我现在拥有的东西。
我查看了有关 BoxLayout 的 Oracle 文档,这是左侧控件的容器正在使用的内容,但我没有看到在调整窗口大小时防止按钮分开的方法。我希望它们在顶部被砸碎,然后呆在那里而不留空隙。 BoxLayout 的“胶水”功能并没有真正发挥您的作用,它可能应该被称为橡皮筋。
我的问题是,当屏幕调整大小时,如何防止左侧的内容越来越宽?
我的图形用户界面:
public class TestCode extends JFrame{
JTextArea textArea = new JTextArea ();
JComboBox <String> typeComboBox;
JTextField searchField;
JTextField fileField;
public TestCode() {
System.out.println ("In constructor");
setTitle ("GUI Test");
setSize (600, 300);
setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
setVisible (true);
JScrollPane scrollPane = new JScrollPane(textArea);
add(scrollPane, BorderLayout.CENTER);
JButton readButton = new JButton("Read File");
JButton displayButton = new JButton("Display");
JButton searchButton = new JButton("Search");
searchField = new JTextField(10);
fileField = new JTextField(15);
typeComboBox = new JComboBox <String> ();
typeComboBox.addItem("Index");
typeComboBox.addItem("Type");
typeComboBox.addItem("Name");
JPanel container = new JPanel();
container.setLayout(new BoxLayout(container, BoxLayout.Y_AXIS));
JPanel filePanel = new JPanel();
filePanel.setLayout(new FlowLayout(FlowLayout.LEFT));
filePanel.add(new JLabel("Source file:", SwingConstants.RIGHT));
filePanel.add(fileField);
filePanel.add(readButton);
JPanel displayPanel = new JPanel();
displayPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
displayPanel.add(new JLabel("Display data:", SwingConstants.RIGHT));
displayPanel.add(displayButton);
JPanel searchPanel = new JPanel();
searchPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
searchPanel.add(new JLabel ("Search target"));
searchPanel.add(Box.createHorizontalBox());
searchPanel.add(searchField);
searchPanel.add(typeComboBox);
searchPanel.add(Box.createHorizontalBox());
searchPanel.add(searchButton);
container.add(filePanel);
container.add(displayPanel);
container.add(searchPanel);
add(container, BorderLayout.WEST);
validate();
}
【问题讨论】:
-
尝试使用多个布局而不是单个布局
-
我是,我有盒子布局和流布局。盒子布局是允许行分开的原因。
-
我不熟悉 BoxLayout,但在这种情况下,我会为“左”容器使用 AbsoluteLayout。也许这是一个选择。
-
然后去掉box布局,把组件放到grid bag布局中。顺便说一句,您使用的是什么 ide?span>
-
@NikolaKolev。使用 AbsoluteLayout 是一个糟糕的建议。 Swing 被设计为与布局管理器一起使用,原因有很多,这里就不一一列举了。
标签: java swing user-interface layout-manager