我已经阅读了很多有关 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)
你的两个文件都有这个
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()一个可以在其上显示它们的框架。
| 归档时间: |
|
| 查看次数: |
891 次 |
| 最近记录: |