java - 如何在 GridBagLayout 中使中间列大于侧列?
问题描述
我正在尝试进行 3 列布局。我怎样才能让中间柱比侧柱大?我正在使用GridBagLayout
Java Swing。我在搞乱,GridWidth
但它不起作用。
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class GridBag extends JFrame{
JPanel j1, j2, j3;
GridBagConstraints gbc = new GridBagConstraints();
public GridBag() {
super("Pandemic");
setSize(1000, 500); //suggested size
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setLayout(new GridBagLayout());
j1 = new JPanel();
j1.setBackground(Color.blue);
j2 = new JPanel();
j2.setBackground(Color.red);
j3 = new JPanel();
j3.setBackground(Color.yellow);
gbc.weightx = 0.5;
gbc.gridx = 0;
gbc.gridy = 0;
gbc.gridwidth = 3;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.ipady = 1000;
this.add(j1, gbc);
gbc.gridx = GridBagConstraints.RELATIVE;
gbc.gridy = 0;
gbc.gridwidth = 2;
this.add(j2, gbc);
gbc.gridx = GridBagConstraints.RELATIVE;
gbc.gridy = 0;
this.add(j3, gbc);
this.setVisible(true);
}
public static void main(String[] args) {
new GridBag();
}
//end main
}
解决方案
我在搞乱网格宽度,但它不起作用。
你不能只是随机地给一个组件一个随机数的网格宽度。单行上只有 3 个组件,因此每个组件的宽度只能为 1。
但是,如果您的第二行有两个组件,那么您可以将其中一个组件的宽度设为 2,将另一个组件的宽度设为 1。
我怎样才能让中间柱比侧柱大?
gbc.weightx = 0.5;
上面指定了当框架的大小大于每个组件的首选大小时,如何为每个组件分配额外的空间。
如果您不更改约束,则对所有组件使用相同的值(因为您使用相同的 GridBagConstraints 对象)。
在您的示例中,所有组件都使用相同的“weightx”,因此所有组件的大小都相同。
这是您需要更改的约束。如果您希望组件具有不同的大小,则组件需要有所不同。
尝试使用:
gbc.weightx = 0.25;
对于蓝色和黄色分量。现在红色组件的大小大约是原来的两倍。
gbc.ipady = 1000;
您可能应该使用“填充”约束来填充每个面板的垂直高度。然后它将自动增长以填充框架中的可用空间。
阅读有关如何使用 GridBagLayout的 Swing 教程以获取更多信息和示例。
推荐阅读
- java - 如何随机化char的值?
- c# - VS2017 - 缺少 .net core > 2.1 作为目标框架
- php - Symfony-如何使用 JQuery/AJAX 将简单数据存储到 MySQL 数据库中?
- python - 如何优化这个 for-with 循环?
- ruby - 在家庭网络中无法访问树莓派上与工头一起运行的 Sinatra APP
- css - SVG:如何使用对数刻度
- php - 如何在codeigniter cli中同时处理多个任务
- c++ - 发布代码的 gdb 堆栈跟踪可读性如何影响 x64?
- c - 试图知道为什么这段代码会导致无限循环
- javascript - 为什么 IIFE 不捕获其范围内的变量?