【问题标题】:Do not see the JButtons(JLabel) i added in my JFrame看不到我在 JFrame 中添加的 JButtons(JLabel)
【发布时间】:2018-04-07 13:10:50
【问题描述】:

所以我有一个名为 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?

【问题讨论】:

    标签: java swing


    【解决方案1】:

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

    解决方案:

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

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

    【讨论】:

    • 哦,我的错,在我的脑海中我一直在使用 JPanel,我不知道为什么我使用 JLabels,甚至没有注意到...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-10
    • 2019-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多