- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 Java Swing 中创建以下 GUI。经过一些研究后,我发现网格包布局是最灵活和“最好”的管理器。问题是我对此有些挣扎,无法真正弄清楚。
这是我要创建的布局:
虽然很简单,但这就是我想要的。我想从简单开始。
我从标题开始,只是第一个按钮,但这就是发生的事情:
标题很好,但按钮一直延伸到外面。当然,这是因为: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.createHorizontalStrut(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
的面板。那么你会:
FlowLayout
创建第二个面板,并将按钮添加到按钮面板和面板中。Box.createVerticalGlue()
添加到面板。注意:
您需要使用 setAlignmentX(...)
方法在左/中/右位置正确对齐组件。
对于按钮面板,您需要使用 buttonsPanel.setMaximumSize(buttons.getPreferredSize() )
来防止面板高度增长。
尝试实现这两种解决方案以更好地理解嵌套布局管理器的概念。然后您可以为 future 的布局选择您喜欢的选项。
关于java - 网格袋布局挣扎,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54896482/
我正在尝试创建一个函数来从一个文件中读取摩尔斯电码,将其转换为英文文本,将转换后的文本打印到终端,并将其写入输出文件。这是一个粗略的开始...... #define TOTAL_MORSE 91 #d
好吧,我不知道我做错了什么,我正在尝试在勾选复选框时修改 css。 这是 HTML 代码: PHP: if( isset($_POST['com']) && isset($_POST['check
我是一个 C 语言新手,正在努力解决作业中的 C 语言问题。我需要创建一个简单的程序,将结构类型写入文件,然后读取文件以恢复先前插入的数据。我让这两个部分工作。 还有另一个功能是必需的,它基本上要求用
我有以下代码: window.open("https://www.google.com", menubar=0, true); window.open("https://www.google.com
解决方案:对于以后看到这个的人来说,我使用的解决方案确实是viewDidLayoutSubviews。解决方案实际上相当复杂——每次页面需要重新布局时,我都必须计算几个缩放值并动态调整 Art Vie
我有一个看起来像这样的模型: public class SampleModel { public static SampleModel Create() { retur
我目前正在尝试通过 USB 发送 float 。PC 有一个运行以下代码的 Qt 应用程序 float x = 2.0; memcpy(buffer.data() + 14, &x, sizeof
我正在将一个巨大的 csv (18GB) 加载到内存中,并注意到 R 和 Python 之间存在很大差异。这是在 AWS ec2 r4.8xlarge which has 244 Gb of memo
我是一名优秀的程序员,十分优秀!