将组件的首选尺寸保留在 BorderLayout 的中心

2023-12-31

我有一个使用 BorderLayout 的中型 UI;中心是一个选项卡式窗格,包含具有各种布局的各种面板等。

我希望该边框布局中心的面板根据以下尺寸调整大小 窗口,但我不希望面板内的组件拉伸。标签、组合框、文本字段、按钮——我希望它们保持首选大小,并允许包含它们的面板拉伸。我将它们放在滚动窗格中,以防面板空间太小。

各种带有丰富多彩词汇的海报警告人们不要在组件上使用任何 setXXXsize() 方法的危险。这就是我现在所做的,我想学习如何避免它。

GridBagLayout 不适合我的某些面板。从本质上讲,它是围绕行和列定向的,并不是所有东西都适合行和列。当然,我可以创建人工行和列来适应所有内容,但我真的希望 Swing 有更多的布局选项。

垂直胶水也做不到这一点。我已将其纳入 HFOE 喜爱的 SSCE 中:

    package example;

    import java.awt.BorderLayout;

    import javax.swing.Box;
    import javax.swing.BoxLayout;
    import javax.swing.JComboBox;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;

    public class BorderAndBox extends JFrame
    {
        public static void main(String args[])
        {
            BorderAndBox bnb = new BorderAndBox();
            bnb.createUI();
            bnb.setVisible(true);
        }

        public void createUI()
        {
            JPanel borderPanel = new JPanel(new BorderLayout());

            JLabel northLabel = new JLabel("Nawth");
            borderPanel.add(northLabel, BorderLayout.NORTH);

            String[] southComboChoices = { "one", "two", "three" };
            JComboBox southCombo = new JComboBox(southComboChoices);
            borderPanel.add(southCombo, BorderLayout.SOUTH);

            JPanel centerPanel = new JPanel();
            centerPanel.setLayout(new BoxLayout(centerPanel, BoxLayout.PAGE_AXIS));
            String[] firstChoices = { "first", "uno", "UN" };
            String[] secondChoices = { "second", "dos", "zwei" };
            String[] thirdChoices = { "third", "tres", "drei" };
            JComboBox firstCombo = new JComboBox(firstChoices);
            JComboBox secondCombo = new JComboBox(secondChoices);
            JComboBox thirdCombo = new JComboBox(thirdChoices);
            centerPanel.add(firstCombo);
            centerPanel.add(secondCombo);
            centerPanel.add(thirdCombo);
            centerPanel.add(Box.createVerticalGlue());  // first attempt; does NOT
            // take up available vertical space, instead it appears to create a space
            // that is shared equally among the (now) four components of this space.
            borderPanel.add(centerPanel, BorderLayout.CENTER);

            getContentPane().add(borderPanel);
            pack();
        }

    }

如果放大窗口,中间的组合框也会放大;正如所写,它们下方的垂直胶片也会放大,但不会占用所有可用空间。看来它所获得的空间与它们每个人一样多。

那么解决这个问题的好方法是什么?


import java.awt.BorderLayout;
import java.awt.GridBagLayout;

import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class BorderAndBox extends JFrame
{
public static void main(String args[])
{
    BorderAndBox bnb = new BorderAndBox();
    bnb.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    bnb.createUI();
    bnb.setVisible(true);
}

public void createUI()
{
    JPanel borderPanel = new JPanel(new BorderLayout());

    JLabel northLabel = new JLabel("Nawth");
    borderPanel.add(northLabel, BorderLayout.NORTH);

    String[] southComboChoices = { "one", "two", "three" };
    JComboBox southCombo = new JComboBox(southComboChoices);
    borderPanel.add(southCombo, BorderLayout.SOUTH);

    JPanel centerPanel = new JPanel();
    centerPanel.setLayout(new BoxLayout(centerPanel, BoxLayout.PAGE_AXIS));
    String[] firstChoices = { "first", "uno", "UN" };
    String[] secondChoices = { "second", "dos", "zwei" };
    String[] thirdChoices = { "third", "tres", "drei" };
    JComboBox firstCombo = new JComboBox(firstChoices);
    JComboBox secondCombo = new JComboBox(secondChoices);
    JComboBox thirdCombo = new JComboBox(thirdChoices);
    centerPanel.add(firstCombo);
    centerPanel.add(secondCombo);
    centerPanel.add(thirdCombo);
    centerPanel.add(Box.createVerticalGlue());  // first attempt; does NOT
    // take up available vertical space, instead it appears to create a space
    // that is shared equally among the (now) four components of this space.
    JPanel centerPanelConstrain = new JPanel(new GridBagLayout());
    centerPanelConstrain.add(centerPanel);
    borderPanel.add(centerPanelConstrain, BorderLayout.CENTER);

    getContentPane().add(borderPanel);
    pack();
}

}

也可以看看这个答案 https://stackoverflow.com/a/7181197/418556。解决这个问题的方法不止一种。

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

将组件的首选尺寸保留在 BorderLayout 的中心 的相关文章

  • Java Try Catch Final 没有 Catch 的情况下会阻塞

    我正在审查一些新代码 该程序只有一个 try 和一个 finally 块 既然排除了 catch 块 那么如果 try 块遇到异常或任何可抛出的内容 它如何工作 它直接进入finally块吗 如果 try 块中的任何代码可以引发已检查异常
  • 如果在睡眠线程上调用interrupt()会发生什么?

    我有一个线程 然后run I call sleep 如果我中断这个线程会发生什么 MyThread extends Thread public void run try sleep 1000000 catch InterruptedExce
  • 如何使用 SimpleDateFormat 解析多种格式的日期

    我正在尝试解析文档中的一些日期 用户似乎以类似但不完全相同的格式输入了这些日期 以下是格式 9 09 9 2009 09 2009 9 1 2009 9 1 2009 尝试解析所有这些内容的最佳方法是什么 这些似乎是最常见的 但我想让我困扰
  • 对话框上的 EditText 不返回任何文本

    我太累了 找不到错误 我没有发现任何错误 但我没有从 editText 收到任何文本 请看下面的代码 活动密码 xml
  • Spring安全“记住我”cookie在第一个请求中不可用

    我无法在登录请求后检索 Spring 记住我 cookie 但它在对受保护页面的下一个请求中工作正常 谁能告诉我怎样才能立即得到它 我在登录请求中设置了记住我的 cookie 但在 Spring 重定向回原始 受保护的 url 后无法检索它
  • 来自数据库的 jfreechart 散点图

    如何使用java中的jfreechart绘制mysql数据库表中数据的散点图 我使用过 Swing 库 任何链接都会有帮助 我搜索了谷歌但找不到理解的解决方案 如果您有代码 请提供给我 实际上我确实做了条形图并使用 jfreechart 绘
  • 无法在 Spring Boot 测试中模拟 persistenceContext

    我正在使用带有 Mockito 框架的 spring boot 测试来测试我的应用程序 存储库类 EntityManager 之一作为参考 我的班级如下所示 Repository Transactional Slf4j public cla
  • 如何从 Retrofit2 获取字符串响应?

    我正在做 android 正在寻找一种方法来执行超级基本的 http GET POST 请求 我不断收到错误 java lang IllegalArgumentException Unable to create converter for
  • 在java中实现你自己的阻塞队列

    我知道这个问题之前已经被问过并回答过很多次了 但我只是无法根据互联网上找到的示例找出窍门 例如this http tutorials jenkov com java concurrency blocking queues html or t
  • 隐式超级构造函数 Person() 未定义。必须显式调用另一个构造函数?

    我正在开发一个项目 但收到错误 隐式超级构造函数 Person 未定义 必须显式调用另一个构造函数 我不太明白它 这是我的人物课程 public class Person public Person String name double D
  • RSA OAEP、Golang 加密、Java 解密 -BadPaddingException:解密错误

    我正在尝试解密使用 RSA OAEP 在 Golang 中加密的字符串 但出现 BadPaddingException 解密错误 很难弄清楚我错过了什么 这是Golang加密方法 func encryptString rootPEM io
  • Java 数组的最大维数

    出于好奇 在 Java 中数组可以有多少维 爪哇language不限制维数 但是JavaVM规范将维度数限制为 255 例如 以下代码将无法编译 class Main public static void main String args
  • Spring Security OAuth2简单配置

    我有一个简单的项目 需要以下简单的配置 我有一个 密码 grant type 这意味着我可以提交用户名 密码 用户在登录表单中输入 并在成功时获得 access token 有了该 access token 我就可以请求 API 并获取用户
  • 如何配置 WebService 返回 ArrayList 而不是 Array?

    我有一个在 jax ws 上实现的 java Web 服务 此 Web 服务返回用户的通用列表 它运行得很好 Stateless name AdminToolSessionEJB RemoteBinding jndiBinding Admi
  • 如何在 Eclipse Java 动态 Web 项目中使用 .properties 文件?

    我正在 Eclipse 中开发动态 Web 项目 我创建了一个 properties 文件来存储数据库详细信息 用户名 密码等 我通过右键单击项目和 New gt File 添加它 我使用了Java util包Properties类 但它不
  • 尝试使用等于“是”或“否”的字符串变量重新启动 do-while 循环

    计算行程距离的非常简单的程序 一周前刚刚开始 我有这个循环用于解决真或假问题 但我希望它适用于简单的 是 或 否 我为此分配的字符串是答案 public class Main public static void main String a
  • 将图像添加到自定义 AlertDialog

    我制作了一个 AlertDialog 让用户可以从我显示的 4 个选项中选择一个 前 3 个让他们在单击号码时直接拨打号码 第 4 个显示不同的视图 现在看起来是这样的 由于第四个选项的目的是不同的任务 我想让它看起来不同 因为用户可能会感
  • 在android中跟踪FTP上传数据?

    我有一个运行 Android 的 FTP 系统 但我希望能够在上传时跟踪字节 这样我就可以在上传过程中更新进度条 安卓可以实现这个功能吗 现在 我正在使用org apache common net ftp我正在使用的代码如下 另外 我在 A
  • JAXB - 列表<可序列化>?

    我使用 xjc 制作了一些课程 public class MyType XmlElementRefs XmlElementRef name MyInnerType type JAXBElement class required false
  • Android 和 Java 中绘制椭圆的区别

    在Java中由于某种原因Ellipse2D Double使用参数 height width x y 当我创建一个RectF在Android中参数是 left top right bottom 所以我对适应差异有点困惑 如果在 Java 中创

随机推荐

  • 使用 java 将 .cer 转换为 .jks

    我想将扩展名为 cer 的文件转换为 jks 文件 有人可以帮我解决这个问题吗 我用谷歌搜索但没有得到太多信息 即使是教程或链接也可以 我猜想使用的是Java Key Store 谢谢 我使用 BouncyCastle 库 最新版本 1 5
  • 将 SCSS 附加到 HTML 文档 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 这个问题似乎偏离主题 因为它缺乏足够的信息来诊断问题 更详细地描述您的问题或包括一个最小的例子 http stackoverflow co
  • 焦点输入字段的边框半径

    我们如何调整输入字段焦点的边框半径 HTML
  • 如何使用QtCreator远程调试图形应用程序?

    我开发了一个跨平台的 Qt 应用程序 现在我需要 想要在远程主机上运行它并加载 GUI 表单 我知道有两种方法可以做到这一点 通过连接到 QtCreator 的控制台在远程显示器 可能是虚拟的 上打开应用程序ssh 使用远程 X 会话运行
  • Android Studio 显示错误“无效选项 --enable whpx”

    android studio 在运行 AVD 时显示错误 如下所示 无效选项 启用 whpx 请建议一个更好的解决方案来删除它 尝试这个 Android 模拟器需要 Windows Hypervisor Platform WHPX 确保 W
  • Array.prototype.forEach替代实现参数

    在开发我最新的 Web 应用程序并需要使用Array forEach函数 我不断发现以下代码用于添加对没有内置该函数的旧浏览器的支持 Copyright c Mozilla Foundation http www mozilla org T
  • Hadoop 发行版差异

    有人可以概述一下可用的各种 Hadoop 发行版之间的各种差异吗 Cloudera http www cloudera com hadoop http www cloudera com hadoop Yahoo http developer
  • Laravel Fortify 自定义身份验证重定向

    在 Laravel 强化自定义身份验证过程中 我无法重定向到带有错误消息的登录页面 而我们可以在身份验证中执行此操作 这是定制文档链接 https jetstream laravel com 1 x features authenticat
  • 编译器对看似兼容的函数指针分配发出警告(const 与 no-const)

    我遇到了一些有趣的事情 我认为应该是有效的 首先 编译器 版本 gcc version gcc Debian 4 7 2 5 4 7 2 编译器选项和警告消息 gcc c warn c o warn o warn c 11 5 warnin
  • 编辑淘汰赛 observableArray 中的项目

    我正在寻找一个示例 其中我可以将 observableArray 显示为带有编辑 删除链接的普通文本 可以从单独的表单添加 编辑项目 我无法从编辑链接编辑记录 它会添加新记录 self editItem function p edit co
  • 在 Windows 批处理文件的 FOR 循环中转义星号

    在 Windows 批处理文件中运行以下代码时 除了包含星号的字符串 被跳过 之外 所有内容都正常运行 按编号检查传递的参数 即echo 6 我可以看到星号 只有当传递到 FOR 循环时我才会遇到问题 echo off setlocal e
  • 如何自定义生成的 javadoc 存根?

    在 Netbeans 中 当您键入 在上面的方法中 它生成一个 javadoc 存根 param return 如何自定义生成的文本 我想要一个自定义 javadoc 存根 例如 Author author My custom text p
  • 如何使用 C# 连接到 Google Cloud SQL Server?

    我刚刚在 Google Cloud Platform 上设置了一个 SQL Server 我在那里创建了一个数据库和表 我使用微软的 SQL Server Management Studio SSMS 来连接并创建数据库和表 这一切都奏效了
  • 具有列名的多个列的最大值?

    我已经探索了许多关于如何从多个列中返回最大值以及列名的问题和答案 但我还没有解决问题 在这个问题中将解释 SQL MAX 多列 https stackoverflow com questions 71022 sql max of multi
  • 在 R 文本清理中删除标点符号但保留连字符短语

    有没有有效的方法可以删除文本中的标点符号 但保留连字符的表达方式 例如 容易发生事故 我使用以下函数来清理我的文本 clean text function x remove rt x gsub rt x remove at x gsub w
  • 网站上的弹出窗口每个会话加载一次[重复]

    这个问题在这里已经有答案了 我找到了一些制作 javascript jquery 弹出窗口的方法 但是 也存在一些问题 首先 我对这两种语言不是很好 只是初学者 如果有任何现成的代码 用于在网站加载时打开 POPUP 窗口 但每个浏览器会话
  • 如何强制 Linq to SQL 不使用缓存?

    当我两次进行相同的查询时 第二次它不会从数据库返回新行 我猜它只是使用缓存 这是一个 Windows 窗体应用程序 我在应用程序启动时在其中创建 dataContext 如何强制 Linq to SQL 不使用缓存 这是我遇到问题的示例函数
  • 如何在页面加载时激活 JS 数据过滤器?

    我正在这个网站上工作http fireworkslove com http fireworkslove com 我制作了具有不同类别 推荐 新闻等 的导航 我想在页面打开时显示 推荐 类别 data filter recommended 现
  • Erlang - 未定义的函数

    我正在尝试执行一个非常简单的 Erlang 代码 但它不起作用 我尝试过毫无问题地执行一些 hello worlds 但不是我自己的代码 module server Exported Functions export start 0 pro
  • 将组件的首选尺寸保留在 BorderLayout 的中心

    我有一个使用 BorderLayout 的中型 UI 中心是一个选项卡式窗格 包含具有各种布局的各种面板等 我希望该边框布局中心的面板根据以下尺寸调整大小 窗口 但我不希望面板内的组件拉伸 标签 组合框 文本字段 按钮 我希望它们保持首选大