java - 看不到我在 JFrame 中添加的 JButtons(JLabel)

标签 java swing

所以我有一个名为 Menu 的类,它扩展了 JLabel 并具有一个向其自身添加 3 个 JButton 的构造函数。

 public Menu() {
    this.add(jbutton1);
    this.add(jbutton2);
    this.add(jbutton3);
}

我有另一个名为 GUI 的类,它扩展了 JFrame 并将 JLabel 添加到其 contentPane 中。

public GUI() {
    Menu menu = new Menu();
    getContentPane().add(menu);
    setSize(300,200);
    setVisible(true);
}

GUI的主要方法如下所示:

public static void main(String[] args) {
    GUI gui = new GUI();
}

所以我想要的是一个带有 3 个 JButtons 的 JFrame(稍后会做更多的事情)。相反,我只是得到了一个空白的 JFrame。为什么我看不到我添加的带有 3 个 JButton 的 JLabel?

最佳答案

您忘记了布局管理器,它是控制如何将组件添加到容器以及如何调整容器大小的关键。 JLabels 不习惯用作容器并容纳其他组件,因此默认情况下使用 null 布局 - 根本没有布局,使您成为负责调整任何添加组件的大小和位置的程序员。

解决方案:

  • 自行设置 JButton 的大小和位置 - 这是一个非常糟糕的解决方案,因为它会导致 GUI 只能在一个平台上正常工作,并且难以调试和维护
  • 或者为容器(此处为 JLabel)提供一个合适的布局管理器。
  • 或者使用另一个容器(例如 JPanel)作为 contentPanel,该容器已经具有布局管理器。有多种方法可以让 JPanel 显示图像,包括重写其 PaintComponent 方法。

您可以在这里找到布局管理器教程:Layout Manager Tutorial ,您可以在此处找到 Swing 教程和其他 Swing 资源的链接:Swing Info .

关于java - 看不到我在 JFrame 中添加的 JButtons(JLabel),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49707708/

相关文章:

java - 如何在文件传输时创建进度条

java - 如何在 ubuntu 中将 JMC(Java Mission Control)连接到远程 JVM?

spring Controller 中的 java.lang.StackOverflowError

java - 在 Spring Security 中的 FORM_LOGIN_FILTER 之后添加可选的身份验证步骤

java - 循环获取选定的索引

java - java 泛型中的绑定(bind)不匹配警告

java - 将数据从左上角单元格移动到第一列的每一行

Java - 更新在 Swing 中制作的 GUI

java - 如何根据用户输入在paint方法中绘制墙

java - 文本字段未显示