Java 看不到我在JFrame中添加的JButtons(JLabel)
因此,我有一个名为Menu的类,它扩展了JLabel,并有一个构造函数,它向自身添加了3个jbuttonJava 看不到我在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
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,甚至没有注意到。。。