Swing GroupLayout:调整大小和限制组件大小

2023-12-29

我在用着GroupLayout管理一些动态生成的数据输入表单中的组件。布局或多或少像这样:

*-----------------------------------------------*
| label A     |   field A                       | 
| label B     |   field B                       |
| label C     |   field C                       |
*-----------------------------------------------*

我使用 2 个并行组进行水平布局,使用一个顺序组进行垂直布局。在大多数情况下,一切都运行良好。

我想限制标签的最大宽度(这只是JLabel) 到父级宽度的 1/3JFrame。如果JFrame是固定大小的,这很简单,但我必须处理它的大小调整问题。

我正在接ComponentListener.componentResized()事件来自JFrame但一旦收到这样的事件,我就有点不知道该怎么做了。

我尝试过这种方法,但没有任何运气:

public void componentResized(ComponentEvent e) {
    int maxW = parentFrame.getWidth() / 3;
    for (JLabel l : labels) {
        l.setMaximumSize( // have also tried setSize() and setPreferredSize()
            new Dimension(
                Math.min(l.getSize().width, maxW),
                l.getMaximumSize().height));
    }
    groupLayout.invalidateLayout(getContentSpace());
}

谁能建议一种限制有效标签宽度的方法?

我可能每次都可以从头开始重建布局,但我觉得应该有一种更简单的方法。


在这个例子中,GroupLayout可以简单地依赖标签的首选尺寸,而不必求助于任何setXXXSize()方法。在这种方法中,

  • 标签的空间始终容纳最大的标签。
  • 文本字段的大小可以以一种有用的方式调整。
  • 结果在跨平台和字体上都是正确的。
  • “您不需要为大多数组件指定任何内容……因为组件本身默认具有所需的调整大小行为。”—如何使用 GroupLayout:组件大小和可调整大小 http://docs.oracle.com/javase/tutorial/uiswing/layout/group.html

指某东西的用途GroupLayout.Alignment.TRAILING右对齐标签是个人喜好,我添加了第二个面板来显示它如何嵌套在另一个布局中。

import java.awt.EventQueue;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.GroupLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

/** @see http://stackoverflow.com/questions/8492065 */
public class GroupPanel extends JPanel {

    private JLabel label1 = new JLabel("Primary:");
    private JTextField field1 = new JTextField(16);
    private JLabel label2 = new JLabel("Secondary:");
    private JTextField field2 = new JTextField(16);
    private JLabel label3 = new JLabel("Tertiary:");
    private JTextField field3 = new JTextField(16);

    public GroupPanel(int n) {
        this.setBorder(BorderFactory.createTitledBorder("Panel " + n));
        GroupLayout layout = new GroupLayout(this);          
        this.setLayout(layout);
        layout.setAutoCreateGaps(true);
        layout.setAutoCreateContainerGaps(true);
        layout.setHorizontalGroup(layout.createSequentialGroup()
            .addGroup(layout.createParallelGroup(GroupLayout.Alignment.TRAILING)
                .addComponent(label1)
                .addComponent(label2)
                .addComponent(label3))
            .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
                .addComponent(field1)
                .addComponent(field2)
                .addComponent(field3))
        );
        layout.setVerticalGroup(layout.createSequentialGroup()
            .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                .addComponent(label1)
                .addComponent(field1))
            .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                .addComponent(label2)
                .addComponent(field2))
            .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                .addComponent(label3)
                .addComponent(field3))
        );
    }

    private static void display() {
        JFrame f = new JFrame("GroupPanel");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setLayout(new BoxLayout(f.getContentPane(), BoxLayout.Y_AXIS));
        f.add(new GroupPanel(1));
        f.add(new GroupPanel(2));
        f.add(Box.createVerticalGlue());
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

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

Swing GroupLayout:调整大小和限制组件大小 的相关文章

  • 春天。使用java配置解决循环依赖而不使用@Autowired

    我有循环依赖和java配置 虽然使用 xml 配置解决它非常简单 但如果没有 Autowired 我无法使用 java 配置解决它 豆子 public class A private B b public B getB return b p
  • H2 - 多个应用程序访问同一个 H2 数据库

    我正在使用嵌入式数据库H2在 2 个网络应用程序中说WebApp1 and WebApp2 我运行 WebApp1 并执行一些查询来访问 H2 数据库 同时我运行 WebApp2 但它抛出异常H2 当前已被另一个进程使用 我的需求是 我应该
  • spring boot框架下如何过滤tomcat产生的访问日志

    我们使用spring boot框架 通过嵌入式tomcat生成访问日志 访问日志的格式如下 server tomcat access log enabled true server tomcat access log pattern h l
  • 如何解析比 Java 中 NumberFormat 更严格的数字?

    我正在验证表单中的用户输入 我解析输入NumberFormat http docs oracle com javase 7 docs api java text NumberFormat html 但它是邪恶的 几乎允许任何事情 有没有办法
  • 使 TreeMap 比较器容忍 null

    这个定制的 Valuecomarator 按其值对 TreeMap 进行排序 但在搜索 TreeMap 是否具有某个键时 它不能容忍 nullpointException 如何修改比较器来处理零点 import java io IOExce
  • 全屏独占模式下的 AWT 框架在窗口弹出对话框中最小化

    我正在开发一个在全屏独占模式下使用 awt 框架的应用程序 一切正常 直到弹出窗口可见 这会抢走焦点 我的应用程序将被最小化 这是我的框架的初始化代码 if ApplicationConfig getInstance useFullscre
  • Hibernate HQL 查询:如何将集合设置为查询的命名参数?

    给定以下 HQL 查询 FROM Foo WHERE Id id AND Bar IN barList I set id使用查询对象的setInteger 方法 我想设置 barList用一个List对象 但查看 Hibernate 文档和
  • Spring @Transactional 并发

    class MyService 公共无效a 同步 某个键 b Transactional 传播 传播 REQUIRES NEW 公共无效b 数据库工作吗 除非您使用代码编织 否则这是行不通的 Spring处理事务的默认方式是通过AOP代理
  • 在java中将jpeg/png转换为像素数组

    如何将包含 jpeg 或 png 的字符串转换为像素数组 最好是一维 理想情况下使用java内置的类 原来你需要公共文件上传 http commons apache org fileupload 看着那 这用户指南 http commons
  • 获取运行时生成的类的字节

    我正在使用一个 Java 框架 该框架使用自定义类加载器在运行时生成一些 代理 类 我想为任何这样的类获取自定义 ClassLoader 从 loadClass 返回的与该类对应的原始字节数组 这可能吗 我知道 如果一个类作为资源存在 那么
  • 为什么 Libgdx 的 Table 不接受缩放操作?

    我在 libgdx 库中使用 scene2d 在游戏中创建一些 UI 我使用了一个表格 我想在用户触摸时采取一些缩放操作以使按钮触摸有意义 当我使用任何其他 Actor 类型 例如 Group 并为其提供缩放操作时 它可以工作 但不能工作表
  • 将 Class 对象转换为字节

    如果我有一个Class http java sun com j2se 1 5 0 docs api java lang Class html在运行时实例 我可以获得它的 byte 表示形式吗 我感兴趣的字节将在类文件格式 http java
  • 如何根据服务器/环境动态加载服务器配置?

    目前 我设置了 Maven 配置文件 以便能够为不同的环境 开发 演示 暂存 生产等 部署我的项目 并且它工作得很好 但问题是 对于我拥有的每个模块 Web 应用程序 我需要复制 粘贴此配置文件 它们都是属性文件 当我需要更改环境 服务器配
  • 使用 colt java lib 时出现“矩阵太大”异常

    我正在使用 cern colt matrix lib 进行稀疏矩阵计算 但似乎我一直遇到此错误 线程 main 中的异常 java lang IllegalArgumentException 矩阵太大 我认为这是因为构造函数在 nrows
  • Jersey bean 验证 ParameterNameProvider

    我正在阅读关于泽西岛的文档Bean验证 https jersey java net documentation latest bean validation html The ParameterNameProvider示例显示如何定义方法的
  • bean 中的 Spring JavaConfig 属性未设置?

    我正在考虑将 Spring JavaConfig 与一些属性文件一起使用 但 bean 中的属性未设置 bean 中的属性未设置 这是我的网络配置 Configuration EnableWebMvc PropertySource valu
  • 警告:无法加载 sqljdbc_auth.dll 原因:java.library.path 中没有 sqljdbc_auth

    我正在使用 Ubuntu 12 05 并尝试连接到 Windows Server 2012 来获取数据库 我的数据库名称是 jobs 电脑的IP地址是192 160 1 33 托管在1433 但是当我尝试连接时出现以下错误 WARNING
  • Selenium Webdriver 中的 IF 语句

    我想知道是否有人可以帮助我解决我正在尝试解决的问题以及 Java 中 Webdriver 的 If 语句 当登录到我正在测试的应用程序时 可以在主页之前进入安全问题页面 如果是新用户等 我希望测试中的代码做的是 如果出现安全问题页面 请填写
  • 如何使用 JRE 部署 JavaFX 11 桌面应用程序

    我有一个 JavaFX JDK 8 桌面业务应用程序 它使用 Java Web Start 进行部署 用户安装了 Java 8 只需访问 URL 我的 AWS Linux 服务器上的公共 URL 即可下载 启动应用程序 使用 Web Sta
  • 如何获取 EC2 实例的 CloudWatch 指标数据

    我想获取我的 EC2 实例的 Cloudmetrics 数据 以便我可以使用这些数据绘制图表并将其显示在我的 Android 设备上 我怎么做 有相同的示例程序或教程吗 提前致谢 这就是我正在做的 private static void f

随机推荐

  • 这个 PHP 代码安全吗?

    只是一个简单的问题 以下 PHP 代码安全吗 还有什么你认为我可以或应该补充的吗 post GET post if is numeric post post mysql real escape string post else die NA
  • C# 将一个字符串的一部分复制到另一个字符串

    我正在尝试将文本框的部分文本复制到另一个字符串 例如 如果我的文本框包含 10 个字符 我想将字符 3 到字符 7 复制到另一个名为 TEST 的字符串 我们该怎么做呢 when textbox contains ABCDEFGHIJ th
  • 从 R 中的一系列情节创建电影 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 有没有一种简单的方法可以通过在 R 中将多个情节拼接在一起来创建 电影 这是我使用 R 帮助找到的一种方法 要创建单独的图像帧 jpe
  • 写入 log4net FileAppender 时存在多线程性能问题

    TickZoom 是一款非常高性能的应用程序 它使用自己的并行化库和多个操作系统线程来平滑地利用多核计算机 该应用程序遇到了瓶颈 用户需要从单独的操作系统线程将信息写入 LogAppender FileAppender 使用 Minimal
  • hide() 单选按钮*和*它在 jquery 中的文本标签

    我正在回顾最近的一个项目 解决可访问性问题 并确保所有表单元素都有标签 将标签文本放入标签中会导致我之前编写的一些笨拙代码出现问题 基本上 如果您有一个单选按钮及其标签
  • R 将正数和负数的 $xxx.xx 更改为 xxx.xx 但不舍入

    我有一个 df 其中第 2 列及以后的列是美元金额 例如 1004 23 1482 40 2423 94 等 类似于下面的示例 gt df id desc price 1 0 apple 1 00 2 1 banana 2 25 3 2 g
  • 从 C# 调用时将记录选项返回为 null

    是否有可能返回record option从 F 到 C 的值作为空值 我想将一些逻辑封装在 F 程序集中 并尽可能多地隐藏在外观后面 对 C 来说更自然 这是一些综合示例 type Data DataField1 int DataField
  • 用于信标的 CoreBluetooth

    我有一个需要信标范围的项目 我查看了很多示例代码 它们都使用CLLocationManager and CLBeaconRegion 我的问题是didRangeBeacons每秒仅调用一次回调 尽管我没有找到任何专门针对信标的代码示例 但我
  • 如何在没有完成块的情况下在 NSURLSession 中获取服务器响应数据

    我在用NSURLSession用于背景图片上传 根据上传的图像 我的服务器给了我响应 我确实在我的应用程序中进行了相应的更改 但是当我的应用程序在后台上传图像时 我无法获得服务器响应 因为没有完成块 有没有办法在不使用完成块的情况下获得响应
  • iPhone 应用程序转换为 iPad? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想将我的应用程序转换为通用应用程序 谁能推荐一些好的教程来实现这一目标 我需要将 Interface
  • Node JS 插件 - NAN 与 N-API? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在寻找一个使用 Node js 插件和 C 的项目 我遇到了两个可以使用的抽象库 NAN 和 N API 但是我无法决定应该使用哪一个
  • 线程“main”中的异常 java.lang.NoSuchFieldError: DEF_CONTENT_CHARSET

    您好 我尝试从 java 应用程序中的 solr 数据库中索引一行 我已经添加了必要的罐子 但我不断收到此错误 我的 solr 模式是正确的 我发出请求只是将新行添加到我的数据库中 我也希望它被索引 这是错误 SLF4J Failed to
  • 如何从交互式图表中抓取 json 数据?

    I have a specific section of a website https understat com player 2097 that I want to scrape data from and here s the sc
  • 当屏幕上的数据正常时,在 CSV 文件导出中获取“System.Collections.Generic.List`1[System.String]”

    我是 PowerShell 新手 尝试从 Hyper V 中获取虚拟机名称及其关联 IP 地址的列表 我在屏幕上得到的信息很好 但是当我尝试导出到 csv 时 我得到的所有 IP 地址是System Collections Generic
  • Javadoc 无法识别文档标题选项/标志

    我通过 gradle 使用 doclet 运行 javadoc 当我运行 javadoc doclet 任务时 我收到下一个错误 error invalid flag doctitle 之后是下一个使用表 usage javadoc opt
  • 为什么 UILabel 没有初始化?

    代码来自斯坦福大学CS193p 我添加了一个 NSLog 来查看 标签似乎没有被初始化 任何想法 interface AskerViewController
  • 变量内部的 jQuery 选择器?

    您好 我正在尝试获取另一个 HTML 文件中具有特定类的所有 DIV 的 ID 要加载我使用的文件 get blocks html function data here I don t know how 现在我正在寻找这样的东西 data
  • 如何使用RelativeLayout实现以下结果?

    图片 http img838 imageshack us img838 1402 picse png http img838 imageshack us img838 1402 picse png 如何制作图中的布局 2 仅使用Relati
  • 按组从前一行减去值

    在 R 中 假设我有这个数据框 Data id date value 2380 10 30 12 21 01 2380 10 31 12 22 04 2380 11 1 12 22 65 2380 11 2 12 23 11 20100 1
  • Swing GroupLayout:调整大小和限制组件大小

    我在用着GroupLayout管理一些动态生成的数据输入表单中的组件 布局或多或少像这样 label A field A label B field B label C field C 我使用 2 个并行组进行水平布局 使用一个顺序组进行垂