gpt4 book ai didi

java - 调整 Java GUI 大小时防止垂直间距

转载 作者:行者123 更新时间:2023-12-01 14:12:02 26 4
gpt4 key购买 nike

我有一个有点简单的 GUI,我正在尝试为窗口的左侧创建按钮和控件。右侧有一个文本区域,最终将显示内容。左侧包含供用户操作的按钮和控件。我使用了一系列布局管理器(它们似乎相当挑剔)来制作我现在拥有的东西。

我查看了 Oracle 关于 BoxLayout 的文档,这是左侧控件的容器正在使用的内容,并且我没有找到一种方法可以防止按钮在调整窗口大小时分开。我希望它们在顶部被砸碎,然后呆在那里,不要离开。 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 使用preferredSize 以及最小和最大尺寸来进行布局。在您的情况下,随着更多可用空间,面板将从首选尺寸增长到最大尺寸。为了防止这种情况发生,你可以这样做:

filePanel.setMaximumSize( filePanel.getPreferredSize() );
...
displayPanel.setMaximumSize( displayPanel.getPreferredSize() );
...
searchPanel.setMaximumSize( searchPanel.getPreferredSize() );

尽管更好的解决方案是重写每个面板的 getMaximumSize() 以返回 getPreferredSize()。您永远不会在不同的 LAF 中使用您的应用程序,在这种情况下,每个面板的首选大小可能会发生变化。

关于java - 调整 Java GUI 大小时防止垂直间距,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18442305/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com