为什么我的 GUI 无法显示(通过 NetBeans 运行)

Dar*_*urt 0 java swing

我已经阅读了很多有关 Swing 的内容,但不明白为什么我的 GUI 无法显示?它编译绝对没问题。我猜这是因为我没有正确使用 setVisible() 方法,或者我没有使用 pack() 方法。我必须强调,我是 Swing 的新手。我不是在寻找有人为我做这件事,只是为我指明正确的方向。

我的代码如下:

import java.awt.event.*;
import javax.swing.*;  
import javax.swing.JOptionPane;
import javax.swing.JFrame;
import javax.swing.JPanel;        
import javax.swing.JLabel;

public class TestGUI3 implements ActionListener
{  
    JRadioButton rb1, rb2, rb3;
    JFrame f;  
    JButton b;
    public void TestGUI3(NewGameGUI NewGameGUIMethod)
    {  
        f = new JFrame("Welcome to Ballon d'or");  
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        rb1 = new JRadioButton("Start New Game");  
        rb2 = new JRadioButton("Load Game");
        rb3 = new JRadioButton("Quit");

        rb1.setBounds(50,100,170,30);  
        rb2.setBounds(50,150,170,30);  
        rb3.setBounds(50,200,170,30);

        ButtonGroup bg=new ButtonGroup();  
        bg.add(rb1);
        bg.add(rb2);
        bg.add(rb3);  

        b = new JButton("OK");
        b.setBounds(200,250,180,30);  
        b.addActionListener(this);
        f.add(rb1);
        f.add(rb2);
        f.add(rb3);
        f.add(b);


        f.setSize(500,500);  
        f.setLayout(null);  
        f.setVisible(true);  
    }  
          @Override public void actionPerformed(ActionEvent e)
            {  
                if(rb1.isSelected())
                {
                    f.dispose();
                    NewGameGUI test = new NewGameGUI();

                    test.getFrame().setVisible(true);
                    //JOptionPane.showMessageDialog(f,"New Game");  
                }  
                if(rb2.isSelected())
                {
                    JOptionPane.showMessageDialog(f,"Load Game");  
                } 
                if(rb3.isSelected())
                {
                    System.exit(0);
                }  

            }

            public static void main(String[] args) 
            {  

                new TestGUI3();  
            }  
}  
Run Code Online (Sandbox Code Playgroud)

// 我的另一个班级

import java.awt.event.*;
import javax.swing.*;  
import javax.swing.JOptionPane;
import javax.swing.JFrame;
import javax.swing.JPanel;        
import javax.swing.JLabel;

public class NewGameGUI implements ActionListener
{ 
  JRadioButton rb1, rb2, rb3, rb4, rb5, rb6, rb7, rb8 , rb9 , rb10, rb11, rb12, rb13, rb14, rb15, rb16, rb17, rb18, rb19, rb20;
    JFrame f2;  
    JButton b;
    JLabel label1; 
    public void NewGameGUIMethod()
    {  
        label1 = new JLabel("Please choose a team");
        f2 = new JFrame("Ballon d'or");  
        f2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        rb1 = new JRadioButton("Arsenal");  
        rb2 = new JRadioButton("Aston Villa");
        rb3 = new JRadioButton("Bournemouth");
        rb4 = new JRadioButton("Chelsea");
        rb5 = new JRadioButton("Crystal Palace");
        rb6 = new JRadioButton("Everton");
        rb7 = new JRadioButton("Leicester City");
        rb8 = new JRadioButton("Liverpool");
        rb9 = new JRadioButton("Manchester United");
        rb10 = new JRadioButton("Manchester City");
        rb11 = new JRadioButton("Newcastle United");
        rb12 = new JRadioButton("Norwich City");
        rb13 = new JRadioButton("Southampton");
        rb14 = new JRadioButton("Stoke City");
        rb15 = new JRadioButton("Sunderland");
        rb16 = new JRadioButton("Swansea City");
        rb17 = new JRadioButton("Tottenham Hotspur");
        rb18 = new JRadioButton("Watford");
        rb19 = new JRadioButton("West Brom");
        rb20 = new JRadioButton("West Ham");


        label1.setBounds(50,25,200,30);
        rb1.setBounds(50,100,170,30);  
        rb2.setBounds(50,150,170,30);  
        rb3.setBounds(50,200,170,30);

        ButtonGroup bg=new ButtonGroup();  
        bg.add(rb1);
        bg.add(rb2);
        bg.add(rb3);  
        bg.add(rb4); 
        bg.add(rb5); 
        bg.add(rb6); 
        bg.add(rb7); 
        bg.add(rb8); 
        bg.add(rb9); 
        bg.add(rb10); 
        bg.add(rb11); 
        bg.add(rb12); 
        bg.add(rb13); 
        bg.add(rb14); 
        bg.add(rb15);
        bg.add(rb16);
        bg.add(rb17);
        bg.add(rb18);
        bg.add(rb19);
        bg.add(rb20);

        b = new JButton("OK");
        b.setBounds(200,250,180,30);  
        b.addActionListener(this);
        f2.add(rb1);
        f2.add(rb2);
        f2.add(rb3);
        f2.add(rb4);
        f2.add(rb5);
        f2.add(rb6);
        f2.add(rb7);
        f2.add(rb8);
        f2.add(rb9);
        f2.add(rb10);
        f2.add(rb11);
        f2.add(rb12);
        f2.add(rb13);
        f2.add(rb14);
        f2.add(rb15);
        f2.add(rb16);
        f2.add(rb17);
        f2.add(rb18);
        f2.add(rb19);
        f2.add(rb20);
        f2.add(b);


        f2.setSize(500,500);  
        f2.setLayout(null);  
        f2.setVisible(true);  

        NewGameGUI test = new NewGameGUI();
        test.setFrame(f2);

    }

    public void setFrame(JFrame f2){
        this.f2 = f2;
    }
    public JFrame getFrame(){

    return f2;
    }
            public void actionPerformed(ActionEvent e)
            {  
                if(rb1.isSelected())
                {
                    f2.dispose();

                    //JOptionPane.showMessageDialog(f,"New Game");  
                }  
                if(rb2.isSelected())
                {
                    JOptionPane.showMessageDialog(f2,"Load Game");  
                } 
                if(rb3.isSelected())
                {
                    System.exit(0);
                }  

            }

            public static void main(String[] args) 
            {  
                new TestGUI3();  
            }  
}
Run Code Online (Sandbox Code Playgroud)

cri*_*007 5

你的两个文件都有这个

public static void main(String[] args) 
{  
    new TestGUI3();  
}  
Run Code Online (Sandbox Code Playgroud)

这将调用该类的默认构造函数TestGUI3,该构造函数不执行任何操作。


此外,您对构造函数的理解似乎与实例方法相冲突。

public void TestGUI3(NewGameGUI NewGameGUIMethod)
Run Code Online (Sandbox Code Playgroud)

public void NewGameGUIMethod()
Run Code Online (Sandbox Code Playgroud)

构造函数没有返回类型。另外,其中第二个甚至不是它所在的类的名称......


我建议您做类似的事情class TestGUI3 extends JFrame implements ActionListener,这样,您就不需要对框架进行内联引用,而是您的类setVisible()一个可以在其上显示它们的框架。

  • 除了您的回答之外,他还将其他构造函数声明为“public void TestGUI3()”,这会产生类函数而不是构造函数。 (2认同)