如何使用 GridBagLayout 在 JPanel 中对齐组件中心?

2023-11-25

当我尝试对齐组件时,它要么向左侧移动,要么向右侧移动。

所以我只想解决这个问题,并告诉我如何将面板的尺寸设置为 400 x 350 像素。

enter image description here

这是我的代码......titleLabel and ResultLabel应居中对齐

public TimeGui() {

    layout = new GridBagLayout();
    setSize(400, 350);  //**Its not working**
    setBackground(Color.LIGHT_GRAY);
    setBorder(BorderFactory.createLineBorder(Color.BLACK));
    setBorder(new TitledBorder(new EtchedBorder(), "Time Conversion") );

    setLayout(layout);
    layoutConstraints = new GridBagConstraints();       
    textField1 = new JTextField(10);
    textField2 = new JTextField(10);

    String[] names1 = {"Seconds", "Minutes", "Hours", "Days", "Weeks"};


    comboBox1 = new JComboBox<>(names1);
    comboBox2 = new JComboBox<>(names1);

    titleLabel = new JLabel("Time Conversion Unit", JLabel.CENTER);
    resultLabel = new JLabel("Result Label");
    equalLabel = new JLabel("=");

    convertButton = new JButton("Convert");


    layoutConstraints.fill = GridBagConstraints.HORIZONTAL;
    Insets inset = new Insets(10, 10, 10, 10);
    layoutConstraints.anchor = GridBagConstraints.CENTER;

    addComponent(titleLabel, 0, 0, 2, 2, inset ); // I tried (0,1,2,2) 



    addComponent(comboBox1, 3, 0, 2, 3, inset);

    addComponent(comboBox2, 3, 2, 2, 3, inset);

    addComponent(textField1, 6, 0, 1, 2, inset);

    addComponent(equalLabel, 6, 1, 1, 2, inset);

    addComponent(textField2, 6, 2, 1, 2, inset);

    addComponent(resultLabel, 8, 1, 2, 1, inset);

    addComponent(convertButton, 10, 0, 2, 2, inset);

}

private void addComponent(Component component, int row,
        int column, int width, int height, Insets inset1) {
    layoutConstraints.gridx = column;
    layoutConstraints.gridy = row;
    layoutConstraints.gridwidth = width;
    layoutConstraints.gridheight = height;
    layoutConstraints.insets = inset1;
    layout.setConstraints(component, layoutConstraints);
    add(component);
}
}

问题在于你的gridwidth和你的fill特性...

enter image description hereenter image description here

基本上我改变的只是......

addComponent(titleLabel, 0, 0, GridBagConstraints.REMAINDER, 2, inset); // I tried (0,1,2,2) 
addComponent(comboBox1, 3, 0, 1, 3, inset);
addComponent(comboBox2, 3, 2, 1, 3, inset);
addComponent(textField1, 6, 0, 1, 2, inset);
addComponent(equalLabel, 6, 1, 1, 2, inset);
addComponent(textField2, 6, 2, 1, 2, inset);
layoutConstraints.fill = GridBagConstraints.NONE;
addComponent(resultLabel, 8, 0, GridBagConstraints.REMAINDER, 1, inset);
addComponent(convertButton, 10, 0, GridBagConstraints.REMAINDER, 2, inset);

你可以和其他几个人一起玩。

至于定义面板的实际大小,您能做的最好的事情就是覆盖getPreferredSize的方法TimeGui...

@Override
public Dimension getPreferredSize() {
    return new Dimension(400, 350);
}

这将向父容器“建议”您想要布局的大小。请记住,这是一个可选值,布局管理器完全有权利忽略它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 GridBagLayout 在 JPanel 中对齐组件中心? 的相关文章

随机推荐

  • C++ 函数中静态变量的生命周期是多长?

    如果一个变量被声明为static在函数的作用域中 它仅初始化一次并在函数调用之间保留其值 它的寿命究竟是多少 它的构造函数和析构函数什么时候被调用 void foo static string plonk When will I die T
  • 从 Delphi 调用 dotNET 并返回一个字符串

    Delphi 应用程序如何调用导出函数 非 COM dotNET 程序集并让该函数返回字符串 对于我的特定应用程序来说 COM 不是一个可能的解决方案 我可以控制通话的两端 到目前为止我所尝试过的 Delphi 客户端 type TStrP
  • 为什么我的 python 程序在 eclipse/pydev 中调试这么慢?

    我有一个相对简单 没有类 的 python 2 7 程序 该程序所做的第一件事是将 sqlite 数据库读入字典中 数据库很大 但不是很大 磁盘上大约 90Meg 读入大约需要 20 秒 读入数据库后 我初始化一些变量 例如 localMa
  • 制作 CSS 下拉菜单 2 列

    我目前有一个 CSS ul li 使用以下代码的下拉菜单 不幸的是 我希望子菜单显示为 2 列 因为该子菜单中有大约 16 个项目 有谁知道如何使用下面的代码使这个下拉菜单成为 2 列 menu border none border 0px
  • SVG 路径字符串上的布尔运算

    我遇到了一个概念上的困难问题 简而言之 我需要找到通过不同布尔运算组合的两个向量路径的向量路径 例如并 差 交 减 如果我能像 Canvas 的 globalCompositeOperation 那样进行操作 那就太好了 我到底该怎么做呢
  • 使用 pthread_cancel 取消线程:好习惯还是坏习惯

    我在 Linux CentOS 5 3 上有一个 C 程序 它生成多个线程 这些线程处于无限循环中以执行作业并睡眠一定分钟 现在 我必须取消正在运行的线程 以防出现新的配置通知 并重新启动一组新的线程 为此我使用了 pthread canc
  • 如何在列上存储元数据

    假设您正在收集有关即将上映的超级英雄电影的内部信息 并且您的主电影表如下所示 Table 1 Title Director Leading Male Leading Female Villain Green Lantern Kubrick
  • 如何在 python 中部署函数及其依赖项?

    我正在尝试使用serverless用于创建和部署 AWS Lambda 函数的框架 我创建了一个名为vendored在项目的根目录中并安装 使用pip install 函数依赖关系 但是 每当我尝试运行它时 使用serverless fun
  • 如何从 Tensorflow 中的张量中获取特定行?

    我有一个张量定义如下 temp var tf Variable initial value np asarray 1 2 3 4 5 6 7 8 9 10 11 12 我还有一个要从张量中获取的行索引数组 idx tf constant 0
  • *ngIf 和 *ngFor 在同一元素上导致错误

    我在尝试使用 Angular 时遇到问题 ngFor and ngIf在同一个元素上 当尝试循环遍历集合时 ngFor 该集合被视为null因此在尝试访问模板中的属性时会失败 Component selector shell templat
  • 为什么 PHP 要这样选择随机值?

    所以 我正在测试一些东西并注意到当我运行此代码时 arr str split ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890 1 print r implode
  • char[9][9] 的初始值设定项过多[重复]

    这个问题在这里已经有答案了 但问题是 我声明的 char 数组中的初始值设定项数量正是如此 char dash 9 9 1 2 3 4 5 6 7 8 9 a b c d e f g h i q w e r t y u i o 9 8 7
  • 如何在 Windows 7 上设置 mongo db dbpath?

    如何在 Windows 7 上设置 mongo db dbpath 我在 C 盘中创建了一个目录 data db 但它不起作用 mongodb 数据目录不是特定于应用程序的 这是mongod exe具体流程 As 文档 says 默认情况下
  • 检测SQL注入

    我来到了一家已经有一个成熟项目的公司 但是在我之前在这里工作的程序员没有遵循约定 也没有使用参数化 SQL 查询 结果是在一个非常大的地方有超过 1000 个地方可能容易受到 SQL 注入攻击的项目 我需要找到一个解决方案 能够自动检测代码
  • 使用 Jsoup 打开连接,获取状态码并解析文档

    我正在使用 jsoup 创建一个类 它将执行以下操作 构造函数打开一个到 url 的连接 我有一个方法可以检查页面的状态 即 200 404 等 我有一个方法来解析页面并返回 url 列表 下面是我正在尝试做的事情的粗略工作 不是很粗略 因
  • void * 类型化函数参数

    我有一个功能 void Client void threaData 你能告诉我一些关于void threadData范围 当你使用void 参数以及为什么 void 是一个通用指针 可以指向任何对象类型 上面的函数可以接受任何类型的指针 也
  • Mongodb 崩溃收到信号 15(终止)

    我的 mongodb 服务器突然收到信号 15 已终止 我不知道为什么 mongodb 崩溃了 以下是日志消息 Mon Jun 27 07 33 31 701 signalProcessingThread got signal 15 Ter
  • MongoDB聚合项目字符串到ObjectId

    我正在尝试在聚合查询中将十六进制字符串转换为其等效的 ObjectID 我尝试了两种不同的方法 db omvas aggregate project EID let vars id EID in ObjectId id group id E
  • Server.MapPath 和 HostingEnvironment.MapPath 有什么区别?

    有什么区别吗Server MapPath and HostingEnvironment MapPath Does Server MapPath 有什么优势HostingEnvironment MapPath 我最初的问题是在服务器上映射文件
  • 如何使用 GridBagLayout 在 JPanel 中对齐组件中心?

    当我尝试对齐组件时 它要么向左侧移动 要么向右侧移动 所以我只想解决这个问题 并告诉我如何将面板的尺寸设置为 400 x 350 像素 这是我的代码 titleLabel and ResultLabel应居中对齐 public TimeGu