具有空布局的 JPanel 类不显示组件

2023-12-03

因此,我创建了一个“CustomPanel”类的对象,该对象创建一个带有 GridLayout 的 JPanel 和其中的标签,然后将其添加到我的 JFrame 中。它可以很好地显示标签“HELLO”,但是当我将 jpanel 的布局管理器更改为 (null) 时,它不会显示任何内容。我知道,我知道使用空布局是一种非常糟糕的做法,但我只想知道为什么它不显示组件。

主要类别:

import javax.swing.JFrame;

public class MainMenu extends javax.swing.JFrame{

    private static void createAndShowGUI() {
        //Create and set up the window.
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //Size the window.
        frame.setSize(500, 500);

        CustomPanel panel = new CustomPanel();

        frame.getContentPane().add(panel);

        frame.setVisible(true);
    }

    public static void main(String[] args) {

        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }
}

带有 GridLayout 的 CustomPanel 类(效果很好):

import java.awt.GridLayout;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class CustomPanel extends JPanel{

    public CustomPanel() {
        initUI();
    }

    public final void initUI() {

        // create the panel and set the layout
        JPanel main = new JPanel();
        main.setLayout(new GridLayout());

        // create the labels
        JLabel myLabel = new JLabel("HELLO");

        // add componets to panel
        main.add(myLabel);

        this.add(main);
    }
}

具有空布局的 CustomPanel 类(这不起作用):

import javax.swing.JLabel;
import javax.swing.JPanel;

public class CustomPanel extends JPanel{

    public CustomPanel() {
        initUI();
    }

    public final void initUI() {

        // create the panel and set the layout
        JPanel main = new JPanel();
        main.setLayout(null);

        // create the labels
        JLabel myLabel = new JLabel("HELLO");
        myLabel.setBounds(10, 10, myLabel.getPreferredSize().width, myLabel.getPreferredSize().height);

        // add componets to panel
        main.add(myLabel);

        this.add(main);
    }
}

jlabel 在 jpanel 内正确设置,因此它应该显示在 jframe 的左上角,但事实并非如此。 是什么原因造成的?我错过了什么?


问题是,当您不使用正确的布局管理器时,主 JPanel 的首选大小为 0,0,并且不会在其所在的容器内显示。保存主 JPanel 的 CustomPanel 使用 FlowLayout 并将使用其包含的组件的首选大小来帮助调整这些组件的大小和位置,但由于 main 没有布局,因此将 JLabel 添加到 main 不会增加首选大小,因为它应该是 - 另一个使用布局的原因,CustomPanel 会将 main 显示为一个无大小的点。您当然可以通过给 main 一个首选大小来解决这个问题main.setPreferredSize(...),但是这样你就会用一个拼凑来解决一个拼凑——这不好。另一种可能的解决方案是将 CustomPanel 的布局更改为其他可能扩展它所包含的主 JPanel 的布局,也许为 CustomPanel 提供一个 BorderLayout。在这种情况下,以默认方式将 main 添加到 CustomPanel 会将主 JPanel 放置到 BorderLayout.CENTER 位置,将其展开以填充 CustomPanel,并且可能会看到 JLabel。

当然,正确的解决方案是尽可能避免使用空布局。

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

具有空布局的 JPanel 类不显示组件 的相关文章

  • Java中有没有一种方法可以通过名称实例化一个类?

    我正在寻找问题 从字符串名称实例化一个类 https stackoverflow com questions 9854900 instantiate an class from its string name它描述了如何在有名称的情况下实例
  • 如何将本机库链接到 IntelliJ 中的 jar?

    我正在尝试在 IntelliJ 中设置 OpenCV 但是我一直在弄清楚如何告诉 IntelliJ 在哪里可以找到本机库位置 在 Eclipse 中 添加 jar 后 您可以在 Build Config 屏幕中设置 Native 库的位置
  • 不同帐户上的 Spring Boot、JmsListener 和 SQS 队列

    我正在尝试开发一个 Spring Boot 1 5 应用程序 该应用程序需要侦听来自两个不同 AWS 帐户的 SQS 队列 是否可以使用 JmsListener 注解创建监听器 我已检查权限是否正确 我可以使用 getQueueUrl 获取
  • 如何循环遍历所有组合,例如48 选择 5 [重复]

    这个问题在这里已经有答案了 可能的重复 如何在java中从大小为n的集合中迭代生成k个元素子集 https stackoverflow com questions 4504974 how to iteratively generate k
  • 为 java 游戏创建交互式 GUI

    大家好 我正在创建一个类似于 java 中的 farmville 的游戏 我只是想知道如何实现用户通常单击以与游戏客户端交互的交互式对象 按钮 我不想使用 swing 库 通用 Windows 看起来像对象 我想为我的按钮导入自定义图像 并
  • Pig Udf 显示结果

    我是 Pig 的新手 我用 Java 编写了一个 udf 并且包含了一个 System out println 其中的声明 我必须知道在 Pig 中运行时该语句在哪里打印 假设你的UDF 扩展了 EvalFunc 您可以使用从返回的 Log
  • jQuery AJAX 调用 Java 方法

    使用 jQuery AJAX 我们可以调用特定的 JAVA 方法 例如从 Action 类 该 Java 方法返回的数据将用于填充一些 HTML 代码 请告诉我是否可以使用 jQuery 轻松完成此操作 就像在 DWR 中一样 此外 对于
  • 谷歌应用程序引擎会话

    什么是java应用程序引擎 默认会话超时 如果我们将会话超时设置为非常非常长的时间 会不会产生不良影响 因为谷歌应用程序引擎会话默认情况下仅存储在数据存储中 就像facebook一样 每次访问该页面时 会话仍然永远存在 默认会话超时设置为
  • Java 公历日历更改时区

    我正在尝试设置 HOUR OF DAY 字段并更改 GregorianCalendar 日期对象的时区 GregorianCalendar date new GregorianCalendar TimeZone getTimeZone GM
  • 在 junit 测试中获取 javax.lang.model.element.Element 类

    我想测试我的实用程序类 ElementUtils 但我不知道如何将类作为元素获取 在 AnnotationProcessors 中 我使用以下代码获取元素 Set
  • Java ResultSet 如何检查是否有结果

    结果集 http java sun com j2se 1 4 2 docs api java sql ResultSet html没有 hasNext 方法 我想检查 resultSet 是否有任何值 这是正确的方法吗 if resultS
  • 如何在谷歌地图android上显示多个标记

    我想在谷歌地图android上显示带有多个标记的位置 问题是当我运行我的应用程序时 它只显示一个位置 标记 这是我的代码 public class koordinatTask extends AsyncTask
  • 获取文件的总大小(以字节为单位)[重复]

    这个问题在这里已经有答案了 可能的重复 java 高效获取文件大小 https stackoverflow com questions 116574 java get file size efficiently 我有一个名为 filenam
  • 如何使用 jUnit 将测试用例添加到套件中?

    我有 2 个测试类 都扩展了TestCase 每个类都包含一堆针对我的程序运行的单独测试 如何将这两个类 以及它们拥有的所有测试 作为同一套件的一部分执行 我正在使用 jUnit 4 8 在 jUnit4 中你有这样的东西 RunWith
  • 专门针对 JSP 的测试驱动开发

    在理解 TDD 到底是什么之前 我就已经开始编写测试驱动的代码了 在没有实现的情况下调用函数和类可以帮助我以更快 更有效的方式理解和构建我的应用程序 所以我非常习惯编写代码 gt 编译它 gt 看到它失败 gt 通过构建其实现来修复它的过程
  • Android:无法使用 DbHelper 和 Contract 类将数据插入 SQLite

    public class Main2Activity extends AppCompatActivity private EditText editText1 editText2 editText3 editText4 private Bu
  • Opencv Java 灰度

    我编写了以下程序 尝试从彩色转换为灰度 Mat newImage Imgcodecs imread q1 jpg Mat image new Mat new Size newImage cols newImage rows CvType C
  • 如何使用mockito模拟构建器

    我有一个建造者 class Builder private String name private String address public Builder setName String name this name name retur
  • 使用反射覆盖最终静态字段是否有限制?

    在我的一些单元测试中 我在最终静态字段上的反射中遇到了奇怪的行为 下面是说明我的问题的示例 我有一个基本的 Singleton 类 其中包含一个 Integer public class BasicHolder private static
  • 在java中为组合框分配键

    我想添加一个JComboBox在 Swing 中这很简单 但我想为组合中的每个项目分配值 我有以下代码 JComboBox jc1 new JComboBox jc1 addItem a jc1 addItem b jc1 addItem

随机推荐

  • 内存中、独立、断开连接的 ADO 记录集

    当我的表单加载时 我在数据表子表单上运行此代码 并且没有收到任何错误消息或代码中断 我的 debug print 显示记录集 rs 充满了 2131 条记录 就像它应该的那样 但我的表单显示单行带有 Name 在各个领域 我的控件上的控件源
  • 在Android中浏览并上传pdf或word文件

    private void getDocument Intent intent new Intent Intent ACTION GET CONTENT intent setType application msword applicatio
  • ASP.Net MVC4 将“创建视图”绑定到包含列表的模型

    你好 在互联网领域 我有一个有趣的难题要问你 如果该对象包含纯粹使用 MVC 视图 部分视图的其他对象的列表 是否可以绑定视图来创建对象 伙计 结果很复杂 就像 让我给你一个快速的代码示例来说明我的意思 Models public clas
  • mongodb是否会自动在嵌入文档的_id字段上创建索引?

    在 node js 项目上使用 mongodb 和 mongoose 我想知道是否必须在嵌入项目的 id 字段上确保索引 也就是说 我看到 mongodb 自动在集合的 id 字段上创建索引 它是否也对嵌入集合的 id 字段执行相同的操作
  • 使用反射在抽象类中创建实例

    是否可以使用反射在抽象祖先类中创建派生类的实例 可以说 abstract class Base public Base createInstance using reflection Class ctor c getConstructor
  • Google 日历 api(超出日历使用限制)

    我在我的 php 项目中使用 Google Calendar Api 每天在执行插入查询时都会收到 超出日历使用限制 消息 但删除和列表方法工作正常 这是我的插入功能 谁能帮我 function insertEvent start end
  • 使用复选框在 ReactJS 中保存表单值

    我使用反应钩子表单创建了一个表单组件 该组件由一组复选框和一个文本输入组成 当用户单击最后一个复选框时出现文本输入custom 这个的想法是 当用户单击时 会出现一个文本输入 并且用户可以添加自定义答案 选项 例如 如果用户输入test在输
  • Django:通过查询计算列值的总和

    我有一个模型 class ItemPrice models Model price models DecimalField max digits 8 decimal places 2 我尝试用这个来计算总和price在此查询集中 items
  • 两个卷积层之间的互连

    我有一个关于 CNN 中两个卷积层之间互连的问题 例如假设我有这样的架构 输入 28 28 conv1 3 x 3 滤波器 编号 过滤器数量 16 conv2 3 x 3 滤波器 编号 过滤器数量 32 假设图像尺寸没有减小 经过 conv
  • 值传递和 std::move 相对于引用传递的优点

    我现在正在学习C 尽量避免养成坏习惯 据我了解 clang tidy包含许多 最佳实践 我尝试尽可能地坚持它们 尽管我不一定理解why它们还被认为是好的 但我不确定我是否理解这里推荐的内容 我使用了教程中的此类 class Creature
  • 如何使用 Mongoose 删除数据库?

    我正在 Node js 和 Mongoose 中准备一个数据库创建脚本 如何检查数据库是否已存在 如果存在 则使用 Mongoose 删除 删除 它 我找不到用 Mongoose 删除它的方法 没有方法可以从猫鼬中删除集合 您能做的最好的事
  • Oracle 根据出生日期和今天计算年龄

    我想在 Oracle 函数中根据出生日期计算当前年龄 我正在使用的是 Today Dob 30 12 但这并不准确 因为有些月份有 31 天 我需要以最高精度获得正确的年龄 我怎样才能做到这一点 SQL gt select trunc mo
  • 带有附加列的sql批量插入

    csv 文件包含 8 列 col1 col2 col8 文件名也包含必须插入表中的日期 如果表中的列数和 csv 文件中的列数相等 则以下查询将文件中的所有记录导入到表中 query BULK INSERT real data FROM p
  • 如何从分类分布中抽取样本

    我有一个 3D numpy 数组 其中最后一个维度中包含每个类别的概率 就像是 import numpy as np from scipy special import softmax array np random normal size
  • 在控制台显示上对齐 printf() 列并防止溢出到下一行?

    printf processid t threadid t refilling t drinking t thinking t waiting t terminated t p type t required t consumed t wa
  • 如何在循环中追加多个 pandas DataFrame?

    我已经在这个 python 问题上苦苦挣扎了一段时间 但陷入了困境 我正在循环遍历多个 csv 文件 并希望有一个数据框以每个 csv 文件中的一列作为列名称并设置 date time 的公共索引的方式附加 csv 文件 有 11 个 cs
  • RoR 3 限制用户每天发帖 2 条

    我正在寻找方法限制我的用户每天发帖次数不超过两次 并且每周发帖次数不超过 5 个 我有一个用户和帖子模型 控制器 我一直在研究这些问题 但它们并不完全是我想要的 Rails 3 1 限制用户创建的对象 如何验证 Rails 中的时间 限制用
  • Fortran if 语句中的隐式转换整数 <--> 逻辑

    我有一些遗留的 Fortran 代码 我被要求分析它们并将其翻译成现代语言 我不知道过去使用哪个编译器来编译代码 所以现在我尝试使用 gfortran 来编译它 该代码包含这样的语句 导致 gfortran 抱怨 program test
  • 将元素形成 numpy 数组作为另外两个 numpy 数组时出现广播错误

    我正在尝试生成一个 numpy 数组 其元素作为另外两个 numpy 数组 如下所示 W1b1 np zeros 256 161 W2b2 np zeros 256 257 Wx np array W1b1 W2b2 dtype np ob
  • 具有空布局的 JPanel 类不显示组件

    因此 我创建了一个 CustomPanel 类的对象 该对象创建一个带有 GridLayout 的 JPanel 和其中的标签 然后将其添加到我的 JFrame 中 它可以很好地显示标签 HELLO 但是当我将 jpanel 的布局管理器更