为什么在Java中这个简单的Swing代码中不显示按钮?

为什么在Java中这个简单的Swing代码中不显示按钮?,java,swing,button,jframe,Java,Swing,Button,Jframe,我这里有非常简单的Java swing代码,我没有看到框架中显示的按钮。 有人能帮忙排除故障吗 import javax.swing.*; import java.awt.event.*; public class HangmanGUI extends JFrame{ JComboBox favoriteShows; JButton[] alphaButtons; String infoOnComponent = ""; JB

我这里有非常简单的Java swing代码,我没有看到框架中显示的按钮。 有人能帮忙排除故障吗

import javax.swing.*;

import java.awt.event.*;

public class HangmanGUI extends JFrame{

        JComboBox favoriteShows;
        JButton[] alphaButtons;
        String infoOnComponent = "";
        JButton button1;

        public static void main(String[] args){

            new HangmanGUI();

        }
        //constructor for Hangman
        /**
         * Instantiates a new hangman gui.
         */
        public HangmanGUI() {

            this.setSize(600,400);

            this.setLocationRelativeTo(null);

            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

            this.setTitle("Play Hangman");

            JPanel thePanel = new JPanel();

            button1 = new JButton("Get Answer");

            thePanel.add(button1);

            this.setVisible(true);


        }

}

您从未将面板添加到框架中

public HangmanGUI() {

    this.setSize(600,400);
    this.setLocationRelativeTo(null);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setTitle("Play Hangman");

    JPanel thePanel = new JPanel();
    button1 = new JButton("Get Answer");
    thePanel.add(button1);

    // This is very important ;)        
    add(thePanel);

    this.setVisible(true);

}
就个人而言,我会避免像这样从
JFrame
目录进行扩展。除了您没有向框架添加任何功能之外,它还将您绑定到单个部署/使用


我会从一个像
JPanel
的东西开始,然后从那里构建程序,将这个面板添加到
JFrame
在“main”条目类中创建的一个实例中…IMHO

您永远不会将
面板添加到框架中

public HangmanGUI() {

    this.setSize(600,400);
    this.setLocationRelativeTo(null);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setTitle("Play Hangman");

    JPanel thePanel = new JPanel();
    button1 = new JButton("Get Answer");
    thePanel.add(button1);

    // This is very important ;)        
    add(thePanel);

    this.setVisible(true);

}
就个人而言,我会避免像这样从
JFrame
目录进行扩展。除了您没有向框架添加任何功能之外,它还将您绑定到单个部署/使用


我会从
JPanel
这样的东西开始,然后从那里构建程序,将此面板添加到
JFrame
在“main”entry类中创建的实例中…IMHO

我真蠢。谢谢!,顺便问一下,你为什么建议不要像上面那样
扩展JFrame
?你能用代码来说明不
扩展JFrame
的意思吗?@user1988876,原因有很多。如果您想使用该组件,该怎么办?不能将顶级容器添加到其他容器。如果您希望在另一个项目中包含该组件或以其他方式重新部署它(例如在小程序上),该怎么办?你也没有给框架添加任何新的功能,所以它通常被认为是一种浪费…@ UsRe80876而不是做<代码>公共类Hangman GUI扩展jFrase,你应该考虑使用<代码>公共类Hangman GUI扩展JPAND{
相反。这意味着您将需要创建一个
JFrame
的实例,但这是一个小小的妥协…在创建了一个JFrame实例之后,我如何将Jpanel附加到框架上?在构造函数中?我太傻了。谢谢!顺便问一下,为什么您不建议像上面那样扩展JFrame?您能从中看出吗编码您不扩展JFrame的意思是什么?@user1988876有很多原因。如果您想使用该组件该怎么办?您不能将顶级容器添加到其他容器中。如果您想在另一个项目中包含该组件或以其他方式重新部署它(例如在小程序上),该怎么办您也没有向框架添加任何新的功能,因此它通常被认为是一种浪费…@ USER 1988 876而不是做<代码>公共类Hangman GUI扩展jFrase,您应该考虑使用<代码>公共类Hangman GUI扩展JPAND{相反。这意味着您需要创建一个
JFrame
的实例,但这是一个小小的妥协…在创建一个JFrame实例之后,我如何将Jpanel附加到框架?在构造函数本身中?