【发布时间】:2023-03-06 05:45:02
【问题描述】:
尝试在 Swing 中构建这个 GUI:
在我的 MainFrame 中,我设置了一个这样的 GridLayout 来实现 1 行 2 列:
setLayout(new GridLayout(1, 2));
在左栏中,我认为我需要一个 GridBagLayout,就像在右栏中一样。普通 GridLayout 不再起作用,因为我想要每行的不同大小。对于左列,我尝试了这个:
GridBagConstraints gbc = new GridBagConstraints();
mapPanel = new MapPanel(map);
gbc.fill = GridBagConstraints.BOTH;
gbc.gridx = 0;
gbc.gridy = 0;
gbc.gridheight = 10;
add(mapPanel, gbc);
controlPanel = new JPanel();
controlPanel.add(new JButton("Test"));
controlPanel.add(new JButton("Test 2"));
controlPanel.add(new JButton("Test 3"));
controlPanel.add(new JButton("Test 4"));
gbc.fill = GridBagConstraints.BOTH;
gbc.gridx = 0;
gbc.gridy = 1;
gbc.gridheight = 1;
add(controlPanel, gbc);
logPanel = new LogPanel();
gbc.fill = GridBagConstraints.BOTH;
gbc.gridx = 0;
gbc.gridy = 2;
gbc.gridheight = GridBagConstraints.REMAINDER;
add(logPanel, gbc);
但是,这将导致左侧列中的所有内容“打包在一起”。它不会扩展到列的 100% 高度和 50% 宽度。如何实现如图所示的 GUI?
谢谢!
【问题讨论】:
-
您是否对您布局的组件中的
setPreferredSize(Dimension)进行了实验?此属性与布局管理器如何呈现结果密切相关。 -
@HummelingEngineering 见Should I avoid the use of set(Preferred|Maximum|Minimum)Size methods in Java Swing?(是的。)
-
@AndrewThompson 我同意最好不要调整组件的首选大小,但布局管理器倾向于使用它们,即使不是由“我们”设置。我的评论指向了那个方向......希望我的回答好一点。
-
“我同意最好不要调整组件的首选大小,” 该线程中的建议并没有说不要“调整”它们,只是不要调用 set. 如有必要,覆盖默认方法,但这里没有必要。空边框可以填充标签,文本字段具有
setColumns(int)方法来建议大小。 试图猜测组件所需的大小将导致 GUI 脆弱。 -
@AndrewThompson 的“tweak”实际上是指“set”,一开始可能会更好。
标签: swing user-interface layout-manager grid-layout gridbaglayout