Java 基本GUI窗口不显示

Java 基本GUI窗口不显示,java,swing,Java,Swing,执行一个基本的双面板代码面板是为了提供信息并提供一个输入数据的框,第二个是简单地退出或执行。最初,空白窗口将出现,但在添加PANEL2之后,窗口不再出现。p> 程序编译并没有显示任何错误,除了在主类中它告诉我与New SalesClassGUI()有关的“New instance ignored”(新实例已忽略);。不确定如何处理任何帮助将不胜感激 public class SalesClassGUI extends JFrame { private JPanel panelOne;

执行一个基本的双面板代码面板是为了提供信息并提供一个输入数据的框,第二个是简单地退出或执行。最初,空白窗口将出现,但在添加PANEL2之后,窗口不再出现。p> 程序编译并没有显示任何错误,除了在主类中它告诉我与New SalesClassGUI()有关的“New instance ignored”(新实例已忽略);。不确定如何处理任何帮助将不胜感激

public class SalesClassGUI extends JFrame {

    private JPanel panelOne;
    private JPanel panelTwo;

    private JLabel associateNameLabel;
    private JLabel associateNumberLabel;
    private JLabel productSoldLabel;
    private JLabel productPriceLabel;
    private JLabel stateCodeLabel;
    private JLabel regionCodeLabel;
    private JLabel productNumberLabel;
    private JLabel productDescripLabel;

    private JTextField associateNameField;
    private JTextField associateNumberField;
    private JTextField productSoldField;
    private JTextField productPriceField;
    private JTextField stateCodeField;
    private JTextField regionCodeField;
    private JTextField productNumberField;
    private JTextField productDescripField;

    private JButton calcButton;
    private JButton exitButton;

    private final int WINDOW_WIDTH = 500;
    private final int WINDOW_HEIGHT = 500;

    public void SalesClassGUI() {

        setTitle("Associate Tracker");
        setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout (new GridLayout (8,1)); 
        buildPanel();
        add(panelOne);
        add(panelTwo);
        setVisible(true);
    }

    private void buildPanel() {

        associateNameLabel = new JLabel("Enter name of associate");
        associateNumberLabel = new JLabel("Enter associate number");
        productSoldLabel = new JLabel("Enter number of product sold");
        productPriceLabel = new JLabel("Enter price of the product");
        stateCodeLabel = new JLabel("Enter state code");
        regionCodeLabel = new JLabel("Enter region code");
        productNumberLabel = new JLabel("Enter product number");
        productDescripLabel = new JLabel("Enter product description");

        associateNameField = new JTextField();
        associateNumberField = new JTextField();
        productSoldField = new JTextField();
        productPriceField = new JTextField();
        stateCodeField = new JTextField();
        regionCodeField = new JTextField();
        productNumberField = new JTextField();
        productDescripField = new JTextField();

        //associate name
        panelOne = new JPanel();
        /*panelOne.setLayout(new GridLayout(8, 2));*/


        panelOne.add(associateNameLabel);
        panelOne.add(associateNameField);

        //associate number
        panelOne.add(associateNumberLabel);
        panelOne.add(associateNumberField);

        //prouct sold
        panelOne.add(productSoldLabel);
        panelOne.add(productSoldField);

        //product price
        panelOne.add(productPriceLabel);
        panelOne.add(productPriceField);

        //state code
        panelOne = new JPanel();
        panelOne.add(stateCodeLabel);
        panelOne.add(stateCodeField);

        //region code
        panelOne.add(regionCodeLabel);
        panelOne.add(regionCodeField);

        //product number
        panelOne.add(productNumberLabel);
        panelOne.add(productNumberField);

        //product description
        panelOne.add(productDescripLabel);
        panelOne.add(productDescripField);

        panelTwo = new JPanel();

        panelTwo.setLayout(new GridLayout(1, 2));

        // Define the button
        calcButton = new JButton("Calculate");

        // Add the buttons to the panel
        panelTwo.add(calcButton);
        panelTwo.add(exitButton);

    }

    public static void main(String[] args) {
        SalesClassGUI salesClassGUI = new SalesClassGUI();
    }
}

您的类没有构造函数。因此,当您调用
新SalesClassGUI()
时,将调用默认构造函数,而该构造函数不执行任何操作。然后你的程序就终止了

要正确声明构造函数,需要省略返回类型

更改:

public void SalesClassGUI() {
致:

注意:您将得到一个NPE,因为您的ctor有一些bug,但这将消除“什么都没发生”的问题。我通过在调试器中单步执行代码发现了这一点。你也应该学会这样做

另外,另一种很好的调试技术就是添加一些print语句来跟踪程序的流程,并验证代码是否达到了某些点。这是什么提示我的东西是严重错误,我需要使用调试器

public SalesClassGUI() {
    setTitle("Associate Tracker");
    System.err.println( "ctor" );
    setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLayout (new GridLayout (8,1)); 
    buildPanel();
    add(panelOne);
    add(panelTwo);
    pack();
    System.err.println( "setvisible true" );
    setVisible(true);
}

当“ctor”没有打印出来时,我知道有些地方确实出了问题。

您的类没有构造函数。因此,当您调用
新SalesClassGUI()
时,将调用默认构造函数,而该构造函数不执行任何操作。然后你的程序就终止了

要正确声明构造函数,需要省略返回类型

更改:

public void SalesClassGUI() {
致:

注意:您将得到一个NPE,因为您的ctor有一些bug,但这将消除“什么都没发生”的问题。我通过在调试器中单步执行代码发现了这一点。你也应该学会这样做

另外,另一种很好的调试技术就是添加一些print语句来跟踪程序的流程,并验证代码是否达到了某些点。这是什么提示我的东西是严重错误,我需要使用调试器

public SalesClassGUI() {
    setTitle("Associate Tracker");
    System.err.println( "ctor" );
    setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLayout (new GridLayout (8,1)); 
    buildPanel();
    add(panelOne);
    add(panelTwo);
    pack();
    System.err.println( "setvisible true" );
    setVisible(true);
}

当“ctor”没有打印时,我知道确实有问题。

好吧,你真的应该在事件调度线程上执行GUI代码。好吧,你真的应该在事件调度线程上执行GUI代码。很抱歉,回复太晚了,但这很有帮助!我在删除void时遇到了问题,但实际上只是将buildPanel()方法与SalesClass合并在一起,一切都正常!谢谢!很抱歉回复太晚,但这帮了大忙!我在删除void时遇到了问题,但实际上只是将buildPanel()方法与SalesClass合并在一起,一切都正常!谢谢!