- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在java中使用GridBagLayout,我编写了以下代码,但它没有按我的预期工作
我预计第一个按钮将放置在框架左上角的点 (0,0) 中。
其次,我预计第二个按钮的高度和宽度将是第一个按钮高度和宽度的两倍,但事实并非如此。
这是输出:https://ibb.co/hDZPgx
这是代码:
import javax.swing.*;
import java.awt.*;
public class GUIJframe extends JFrame {
private JButton jb1 = new JButton("first");
private JButton jb2 = new JButton("second");
private JButton jb3 = new JButton("third");
private GridBagConstraints gbc = new GridBagConstraints();
private GridBagLayout gbl = new GridBagLayout();
public GUIJframe () {
jcb.addItem(names);
setLocation(150,150);
setSize(500,500);
setLayout(gbl);
addComponent(jb1,0,0,1,1);
addComponent(jb2,1,0,2,2);
addComponent(jb3,2,2,5,5);
setVisible(true);
}
public void addComponent (Component component, int gridx,int gridy, int width, int height) {
gbc.gridx = gridx;
gbc.gridy = gridy;
gbc.gridwidth = width;
gbc.gridheight = height;
gbl.setConstraints(component,gbc);
add (component);
}
}
最佳答案
I expected that the second button height and width would be twice the size of the first button height and width
你的期望是错误的。
GridBagLayout 单元格非常灵活。一列的宽度不依赖于其他列的宽度。它仅取决于其中子组件的宽度(以及 insets 和 ipadx,如果设置的话)。
如果一个组件占用两列,但这两列中都没有其他内容,则 GridBagLayout 没有理由将列扩展得比容纳该组件的首选宽度所需的更大。
高度和 GridBagLayout 行也是如此。
要强制一个组件的大小是另一个组件的两倍,您将需要不同的布局。 SpringLayout可以做到,虽然不太好用。您可能会发现更容易简单地输入 add a ComponentListener在“较小”组件上,并使用该组件的新尺寸作为“较大”组件 preferred size 的基础.
为了达到您想要的结果,我将使用 SpringLayout。
SpringLayout 允许您创建约束,称为 Spring s,表示组件的边缘、宽度和高度的尺寸范围。这些可能取决于其他组件的尺寸范围或容器的边缘。
SpringLayout layout = new SpringLayout();
setLayout(layout);
SpringLayout.Constraints jb1Constraints =
new SpringLayout.Constraints(jb1);
SpringLayout.Constraints jb2Constraints =
new SpringLayout.Constraints(
Spring.sum(jb1Constraints.getX(), jb1Constraints.getWidth()),
jb1Constraints.getY(),
Spring.scale(jb1Constraints.getWidth(), 2),
Spring.scale(jb1Constraints.getHeight(), 2));
SpringLayout.Constraints jb3Constraints =
new SpringLayout.Constraints(
Spring.sum(jb2Constraints.getX(),
Spring.scale(jb2Constraints.getWidth(), 0.5f)),
Spring.sum(jb2Constraints.getY(), jb2Constraints.getHeight()),
Spring.scale(jb1Constraints.getWidth(), 5),
Spring.scale(jb1Constraints.getHeight(), 5));
add(jb1, jb1Constraints);
add(jb2, jb2Constraints);
add(jb3, jb3Constraints);
// Make container big enough to hold all components.
layout.putConstraint(
SpringLayout.EAST, getContentPane(), 0,
SpringLayout.EAST, jb3);
layout.putConstraint(
SpringLayout.SOUTH, getContentPane(), 0,
SpringLayout.SOUTH, jb3);
jb1
的约束是最简单的:遵守该组件的最小大小、首选大小和最大大小。位置为 (0, 0)。
jb2
的约束取决于 jb1
的约束:
jb2
的 Spring x 坐标为 jb1.x + jb1.width,它实际上是 jb1 的右边缘。jb3
的约束取决于 jb2 和 jb1:
最后,SpringLayout 与其他布局管理器不同,它不会自动将其布局的容器的大小设置为足够大以容纳所有子组件。我们必须自己完成这项工作,使用 SpringLayout.putConstraint将容器的右边缘 (EAST) 链接到 jb3 的右边缘,将容器的底边缘 (SOUTH) 链接到 jb3 的底边缘。
关于java - 网格宽度和网格高度不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50069583/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!