gpt4 book ai didi

java - 网格袋布局挣扎

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

我正在尝试在 Java Swing 中创建以下 GUI。经过一些研究后,我发现网格包布局是最灵活和“最好”的管理器。问题是我对此有些挣扎,无法真正弄清楚。

这是我要创建的布局:

enter image description here

虽然很简单,但这就是我想要的。我想从简单开始。

我从标题开始,只是第一个按钮,但这就是发生的事情:

enter image description here

标题很好,但按钮一直延伸到外面。当然,这是因为:gc.fill = GridBagConstraints.HORIZONTAL,但它希望如此,但又不是一直如此。也许是框架的 1/6。

无论如何,这是我的代码:

public class MainFrame extends JFrame {

private XJLabel jlNaam, welcome;
private XJTextField jtfNaam;
private XJButton jbOk;
private XJButton jbOk2;

public MainFrame() {
setTitle("TITLE");
setSize(600, 400);
setLocationRelativeTo(null);

JPanel panel = new JPanel();
panel.setLayout(new GridBagLayout());

welcome = new XJLabel("TITLE!", 30);
welcome.setHorizontalAlignment(SwingConstants.CENTER);

jbOk = new XJButton("ok");
jbOk2 = new XJButton("ok2");

GridBagConstraints gc = new GridBagConstraints();
gc.fill = GridBagConstraints.HORIZONTAL;
gc.insets = new Insets(10, 10, 10, 10);
gc.anchor = GridBagConstraints.FIRST_LINE_START;

gc.gridy = 0;
gc.gridx = 0;
gc.weighty = 1;
gc.weightx = 3;
panel.add(welcome, gc);

gc.gridy = 1;
gc.gridx = 0;
gc.weighty = 1;
gc.weightx = 1;
panel.add(jbOk, gc);

gc.gridy = 2;
gc.gridx = 0;
gc.weighty = 1;
gc.weightx = 1;
panel.add(jbOk2, gc);

add(panel);

setVisible(true);
}

}

“X”类没什么特别的,它只是为了让它变得更好一点。

我怎样才能实现这个目标?我愿意接受更好的方法来做到这一点。请注意:我在学校,因此不允许使用第三方布局管理器。所以我必须掌握默认的窍门。

最佳答案

就您的情况而言,您似乎需要 3 列中的组件。

问题是在您的情况下,您没有任何包含 3 列组件的单行,因此您无法按照您的意愿放置“标题”和底部“按钮”。

因此,如果您想使用 GridBagLayout,则需要伪造它。因此,在第二行中,您需要在第三列中添加一个虚拟组件。您应该能够使用 Box.createHorizo​​ntalStrut(10) 并将其添加到第三列中的行。

现在,在第一行中,可以通过给它一个 gridwidth = 3

来使组件居中

在最后一行中,使用 gridx = 2 添加按钮。

阅读 Swing 教程中关于 How to Use GridBagLayout 的部分。那里的演示几乎完全符合您的要求。

I found out The Grid Bag Layout was the most flexible and "best" manager to use

但是,您永远不会被迫使用单个布局管理器。

例如,您可以使用带有垂直 BoxLayout 的面板。那么你会:

  1. 将标签添加到面板。
  2. 将按钮添加到面板。
  3. 使用左对齐的FlowLayout创建第二个面板,并将按钮添加到按钮面板和面板中。
  4. Box.createVerticalGlue() 添加到面板。
  5. 将最后一个按钮添加到面板。

注意:

  1. 您需要使用 setAlignmentX(...) 方法在左/中/右位置正确对齐组件。

  2. 对于按钮面板,您需要使用 buttonsPanel.setMaximumSize(buttons.getPreferredSize() ) 来防止面板高度增长。

尝试实现这两种解决方案以更好地理解嵌套布局管理器的概念。然后您可以为 future 的布局选择您喜欢的选项。

关于java - 网格袋布局挣扎,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54896482/

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