java swing布局两个组件

2024-03-02

    +--------------------------------------------+
    |                 +-------+      +----------+|
    |                 | +---+ |      |  +-----+ ||
    |                 | | A | |      |  |  B  | ||
    |                 | +---+ |      |  +-----+ ||
    |                 +-------+      +----------+|
    +--------------------------------------------+
                          ^
                          |
                          |
                        Center

背景:I have

  • JPanel (FlowLayout.CENTER) 内的 JButton(“A”),大小 50x25
  • JPanel (FlowLayout.RIGHT) 内的 JLabel(“B”),大小 100x25
  • 两个JPanel在一个JPanel中

期望的结果:I want

  • JButton“A”始终水平居中,
  • JLabel“B”始终位于右侧。

我尝试过的事情:这些对我不起作用

  • BorderLayout 不适合我,因为 JButton“A” 向左移动:
  • 我不想在 WEST 上放置一个不可见的组件来撤消转变

    +--------------------------------------------+
    |            +-------+           +----------+|
    |            | +---+ |           |  +-----+ ||
    |            | | A | |           |  |  B  | ||
    |            | +---+ |           |  +-----+ ||
    |            +-------+           +----------+|
    +--------------------------------------------+
                     ^    ^
                     |    |
                     |    |
                     |  Center
                     |
                   Shifted Left
    
  • GridLayout 不起作用,因为我不想展开“A”和“B”

感谢任何建议!

p.s.

JButton/JLabels 均位于其自己的 JPanel 内部,因为如果没有 Jpanel,BorderLayout.CENTER 就会将 JButton 扩展到主面板的整个宽度(直至 JLabel 的左边缘)。 JPanel 对于问题的陈述来说不是必需的/关键的

结论:

  • 我选择了下面发布的“充满鳗鱼的气垫船”答案。谢谢!

您应该嵌套 JPanel 并使用布局组合。将包含 JButton 的面板放置到另一个使用 GridLayout(1, 0)(1 行,可变列数)的 JPanel 中是可行的,并且将该 JPanel 放置到使用 BorderLayout 的 JPanel 的 BorderLayout.NORTH 位置中也是可行的。

例如

import java.awt.*;
import javax.swing.*;

public class Foo003 {

   private static void createAndShowGui() {
      JButton btnA = new JButton("A");
      JButton btnB = new JButton("B");

      btnA.setPreferredSize(new Dimension(50, 25));
      btnB.setPreferredSize(new Dimension(100, 25));

      JPanel btnAPanel = new JPanel(); // uses default FlowLayout.CENTER
      JPanel btnBPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
      btnAPanel.add(btnA);
      btnBPanel.add(btnB);

      JPanel topPanel = new JPanel(new GridLayout(1, 0));
      topPanel.add(new JLabel("")); // empty placeholder label
      topPanel.add(btnAPanel);
      topPanel.add(btnBPanel);

      JPanel mainPanel = new JPanel(new BorderLayout());
      mainPanel.add(topPanel, BorderLayout.NORTH);

      mainPanel.setPreferredSize(new Dimension(400, 300));

      JFrame frame = new JFrame("Foo003");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.getContentPane().add(mainPanel);
      frame.pack();
      frame.setLocationByPlatform(true);
      frame.setVisible(true);
   }

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

java swing布局两个组件 的相关文章

随机推荐

  • 将其他实体添加到实体框架支持的域服务

    我们正在研究使用 RIA 服务 7 月 9 日预览版 来公开现有 EF 模型的部分内容 我们已向 Web 应用程序添加了一个域服务类 并指定了要使用的 EF 模型 并选择了一些我们希望通过域服务提供的实体 有些已启用编辑 大多数没有 我们构
  • 为散点图中的每个点绘制词云

    我创建了一个根据以下数据定义的散点图 请注意 当前仅使用前两个字段进行绘图 var data 5 3 text word1 size 4 text word2 size 1 3 5 text word3 size 5 text word4
  • 解码 NSString 中的 Base-64 编码 PNG

    我有一些NSData它是 Base 64 编码的 我想解码它 我看到了一个如下所示的示例 NSData myPNGData xmlString dataUsingEncoding NSUTF8StringEncoding Base64 in
  • 如何使用 django 重定向功能传递上下文数据?

    我有重定向到 URL 的函数 return redirect orders The URL orders有一些正在传递给它的上下文数据 我想传递一些额外的数据以及来自 URL 函数的数据 如下所示 return redirect order
  • 如何按基数方向自由遍历二维数组中的元素? (下、上、左、右)

    这个问题 https stackoverflow com q 22239871 2736496是关于计算穿过迷宫的路径 由二维数组表示 例如 穿过这个迷宫的路径 0 1 2 3 4 0 1 0 1 1 1 1 1 0 0 0 1 2 1 0
  • Postgres用户创建数据库

    我无法使用我的 postgres 客户端和我登录的用户创建数据库 我无法弄清楚如何增加用户的权限 我可以访问运行 postgres 的 Linux 服务器 并且能够使用 psql 以我的用户和 postgres 用户身份登录 有人可以告诉我
  • 为什么我使用 =(单个等于)的相等比较在 Java 中不能正常工作?

    我在以下行中遇到语法错误 但是我不明白这个错误的原因是什么 if address1 compareTo address2 1 System out println address1 is greater than address2 我想要实
  • iOS 7.1 问题 - 当触摸并拖动该选项卡按钮时,选项卡栏图标图像会自动调整大小

    我有这个代码 tabBarItem1 setFinishedSelectedImage UIImage imageNamed tab pressed home icon withFinishedUnselectedImage UIImage
  • 为什么 Android Studio 不会在发布模式下创建我的 AAR 文件

    使用 Android Studio 我有一个 Android 库项目 它在调试模式下生成 library build outputs aar MyLIB aar 但在发布模式下则不然 我没有看到任何错误 只是 构建成功 在 Gradle C
  • 在 Swift 中显示 GoogleMaps?

    我的代码 var camera GMSCameraPosition cameraWithLatitude currentLocation latitude longitude currentLocation longitude zoom 1
  • dir() 非常慢

    当文件较多时 4000个左右 dir 功能非常慢 我的猜测是它创建了一个结构并以低效的方式填充值 是否有任何快速而优雅的替代方法可以使用dir 更新 使用 MATLAB R2011a 在 64 位 Windows 7 中进行测试 更新 2
  • 如何将天蓝色磁盘恢复到以前的快照?

    我在天蓝色中有一个虚拟机 并通过门户选择了它的磁盘 并创建了它的快照 我现在如何恢复到磁盘快照 通过门户或 CLI 我不想从快照创建新磁盘或虚拟机 只是恢复回来 我现在如何恢复到磁盘的快照 通过门户或 命令行界面 您的意思是您想使用此快照来
  • 如何在 VScode 笔记本中激活跨单元格的单词突出显示?

    我在 Visual Studio Code 1 67 0 中使用 Jupyter ipynb 笔记本 当我双击某个单词 区域时 会突出显示该单词 区域的所有出现位置仅在同一个单元格中 对此的设置在settings json file is
  • Javadoc 在 Eclipse 中不可用

    我正在使用面向 Java 开发人员的 Eclipse IDE 版本 Helios 服务版本 2 内部版本号 20110218 0911 我有一个类似的问题堆栈溢出问题 https stackoverflow com questions 69
  • .data 在 pytorch 中还有用吗?

    我是 pytorch 的新手 我读了很多大量使用张量的 pytorch 代码 data成员 但我搜索 data在官方文档和Google中 发现很少 我猜 data包含张量中的数据 但我不知道什么时候需要它 什么时候不需要 data是一个属性
  • Java或C#中工厂设计模式的反思

    我偶然发现了一个词 叫做反思 这是工厂设计模式中常用的功能 我很难理解这个概念 因为我仍在学习如何编程 如何在 C 或 Java 的工厂设计模式中使用反射 谁能给我一个简单的例子 并向我展示您使用反射来实现工厂设计模式的代码 微软提供了这个
  • android 在相机上显示矩形

    您好 我想在相机中显示一个矩形 以便当用户拍摄快照时 只能处理矩形内的区域 知道我该怎么做吗 并且可以通过沿角拖动来调整矩形大小 我没有调用相机应用程序 我正在使用相机 API 您好 我使用本教程解决了问题 see here http ad
  • Android/Java:将任何字符串转换为颜色(十六进制)

    有没有办法像加密 哈希函数一样从 Java Android 中的任何字符串生成颜色 例子 字符串 Home 生成类似 FF1234 的颜色 字符串 Sky 生成类似 00CC33 的颜色 没有随机化 因此 系统将始终为该字符串计算相同的颜色
  • Azure eventhub 多个分区键指向同一分区

    我们正在开发一个多租户应用程序 其中 eventhub 将在不同租户之间共享 我们将在租户之间分配分区 每个租户将在不同的分区上发送消息 我们希望在分区级别对租户进行身份验证 正如 Microsoft 网站上所述 我们根据租户 ID 定义分
  • java swing布局两个组件

    A B