没有看到我在JFrame中添加的JButtons(JLabel)

时间:2018-04-07 13:10:50

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

1 个答案:

答案 0 :(得分:1)

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

解决方案:

  • 自己设置JButton的大小和位置 - 一个非常错误的解决方案,因为它导致GUI只能在一个平台上运行良好且难以调试维持
  • 或者给容器(这里是JLabel)一个体面的布局管理器。
  • 或者使用另一个容器,例如JPanel,已经有布局管理器的容器,作为contentPanel。有一些方法可以让JPanel显示图像,包括覆盖其paintComponent方法。

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