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

Java 看不到我在JFrame中添加的JButtons(JLabel),java,swing,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(); getContent

因此,我有一个名为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个JButton的JFrame(稍后将做更多的事情)。相反,我只是得到了一个空白的JFrame。为什么我看不到我添加的带有3个JButton的JLabel?

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

解决方案:

  • 自己设置JButton的大小和位置——这是一个非常糟糕的解决方案,因为它导致GUI只能在一个平台上正常工作,并且很难调试和维护
  • 或者给容器(这里是JLabel)一个像样的布局管理器
  • 或者使用另一个容器,例如JPanel,一个已经有布局管理器的容器,作为contentPanel。有几种方法可以让JPanel显示图像,包括覆盖其paintComponent方法

您可以在此处找到布局管理器教程:,您可以在此处找到指向Swing教程和其他Swing资源的链接:。

糟糕,在我的脑海中,我一直在使用JPanels,我不知道为什么使用JLabels,甚至没有注意到。。。