如何从另一个 Java class 调用 GUI 表单
How do I call a GUI form from another Java class
所以我一直在弄清楚如何使这项工作但我找不到,所以我决定寻求帮助,下面是我的代码的样子,我想做的是显示用户拒绝继续教程后的主菜单,我尝试
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Login {
public Login() {
String userName;
int option;
//This will ask user to input the username
userName = JOptionPane.showInputDialog(null,"Please enter your name","Welcome", JOptionPane.INFORMATION_MESSAGE);
//Display option
option =JOptionPane.showOptionDialog(null, "Welcome " + userName + "\n\nWould you like to have a tutorial about this game?",
"Welcome", JOptionPane.OK_CANCEL_OPTION, JOptionPane.INFORMATION_MESSAGE, null, null, null);
//Ok to continue to the tutorial
if(option == JOptionPane.OK_OPTION)
{
//Call the tutorial class
}
这是代码出错的地方,我尝试用不同的方式解决
else //If select cancel will proceed to the Main menu
{
//This is the part I can't figure it out, it display different errors when I try different ways
that I searched from website
MainMenu MainMenuGUI = new MainMenu();
}
}
}
这是我的主菜单代码
import javax.swing.*;
import javax.swing.plaf.basic.BasicInternalFrameTitlePane;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.*;
import javax.swing.*;
public class MainMenu {
private JButton exitButton;
private JPanel MainMenu;
private JButton startButton;
private JButton historyButton;
public MainMenu() {
exitButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int exitButton = JOptionPane.YES_NO_OPTION;
exitButton = JOptionPane.showConfirmDialog(null, "Are you sure you want to exit?", "Warning", JOptionPane.YES_NO_OPTION);
if (exitButton == JOptionPane.YES_OPTION)
{
System.exit(0);
}
}
});
}
//Main Menu GUI setup
public static void main(String[] args) {
JFrame frame = new JFrame("Main Menu");
frame.setContentPane(new MainMenu().MainMenu);
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
frame.setMinimumSize(new Dimension(500, 500));
frame.pack();
frame.setVisible(true);
}
}
删除 MainMenu class 中的 public static void main(String args[])
方法。您在 java 程序中只使用一次 main 方法。相反,创建一个类似 public void initUI()
的方法,并将您在 main()
方法中的所有代码放入其中。
并且在您的 Login
class 中,在您调用 MainMenu MainMenuGUI = new MainMenu();
之后
你可以打电话给MainMenuGUI.initUI()
.
一件小事,MainMenuGUI
可能应该 mainMenuGUI
以正确遵循驼峰格式并避免以后混淆。
您当前的代码有几个问题。
通过在 main
方法中创建 JFrame
容器,可以防止 UI 在实例化 MainMenu
时出现 -也就是说,UI 只会在 JVM 调用 main
方法时显示任何内容。为了解决这个问题,我将你的 JFrame
instantiation/setup 移到了 MainMenu
的构造函数中。
在MainMenu
class中,mainMenu
JPanel
从不实例化。这意味着您当前的代码实际上并未在 JFrame 上绘制任何内容 - 您需要实例化 mainMenu
并将 GUI 控件添加到 mainMenu
.
下面的代码解决了这两个问题。
public class MainMenu
{
private JButton exitButton;
private JPanel mainMenu;
private JButton startButton;
private JButton historyButton;
public MainMenu()
{
JFrame frame = new JFrame("Main Menu");
///// mainMenu IS ALWAYS NULL WITHOUT THE NEXT LINE!!!!
this.mainMenu = new JPanel();
frame.setContentPane(this.mainMenu);
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
frame.setMinimumSize(new Dimension(500, 500));
frame.pack();
frame.setVisible(true);
exitButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e)
{
int exitButton = JOptionPane.YES_NO_OPTION;
exitButton = JOptionPane.showConfirmDialog(null, "Are you sure you want to exit?", "Warning", JOptionPane.YES_NO_OPTION);
if (exitButton == JOptionPane.YES_OPTION)
{
System.exit(0);
}
}
});
}
//Main Menu GUI setup
public static void main(String[] args)
{
new MainMenu();
}
所以我一直在弄清楚如何使这项工作但我找不到,所以我决定寻求帮助,下面是我的代码的样子,我想做的是显示用户拒绝继续教程后的主菜单,我尝试
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Login {
public Login() {
String userName;
int option;
//This will ask user to input the username
userName = JOptionPane.showInputDialog(null,"Please enter your name","Welcome", JOptionPane.INFORMATION_MESSAGE);
//Display option
option =JOptionPane.showOptionDialog(null, "Welcome " + userName + "\n\nWould you like to have a tutorial about this game?",
"Welcome", JOptionPane.OK_CANCEL_OPTION, JOptionPane.INFORMATION_MESSAGE, null, null, null);
//Ok to continue to the tutorial
if(option == JOptionPane.OK_OPTION)
{
//Call the tutorial class
}
这是代码出错的地方,我尝试用不同的方式解决
else //If select cancel will proceed to the Main menu
{
//This is the part I can't figure it out, it display different errors when I try different ways
that I searched from website
MainMenu MainMenuGUI = new MainMenu();
}
}
}
这是我的主菜单代码
import javax.swing.*;
import javax.swing.plaf.basic.BasicInternalFrameTitlePane;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.*;
import javax.swing.*;
public class MainMenu {
private JButton exitButton;
private JPanel MainMenu;
private JButton startButton;
private JButton historyButton;
public MainMenu() {
exitButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int exitButton = JOptionPane.YES_NO_OPTION;
exitButton = JOptionPane.showConfirmDialog(null, "Are you sure you want to exit?", "Warning", JOptionPane.YES_NO_OPTION);
if (exitButton == JOptionPane.YES_OPTION)
{
System.exit(0);
}
}
});
}
//Main Menu GUI setup
public static void main(String[] args) {
JFrame frame = new JFrame("Main Menu");
frame.setContentPane(new MainMenu().MainMenu);
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
frame.setMinimumSize(new Dimension(500, 500));
frame.pack();
frame.setVisible(true);
}
}
删除 MainMenu class 中的 public static void main(String args[])
方法。您在 java 程序中只使用一次 main 方法。相反,创建一个类似 public void initUI()
的方法,并将您在 main()
方法中的所有代码放入其中。
并且在您的 Login
class 中,在您调用 MainMenu MainMenuGUI = new MainMenu();
你可以打电话给MainMenuGUI.initUI()
.
一件小事,MainMenuGUI
可能应该 mainMenuGUI
以正确遵循驼峰格式并避免以后混淆。
您当前的代码有几个问题。
通过在
main
方法中创建JFrame
容器,可以防止 UI 在实例化MainMenu
时出现 -也就是说,UI 只会在 JVM 调用main
方法时显示任何内容。为了解决这个问题,我将你的JFrame
instantiation/setup 移到了MainMenu
的构造函数中。在
MainMenu
class中,mainMenu
JPanel
从不实例化。这意味着您当前的代码实际上并未在 JFrame 上绘制任何内容 - 您需要实例化mainMenu
并将 GUI 控件添加到mainMenu
.
下面的代码解决了这两个问题。
public class MainMenu
{
private JButton exitButton;
private JPanel mainMenu;
private JButton startButton;
private JButton historyButton;
public MainMenu()
{
JFrame frame = new JFrame("Main Menu");
///// mainMenu IS ALWAYS NULL WITHOUT THE NEXT LINE!!!!
this.mainMenu = new JPanel();
frame.setContentPane(this.mainMenu);
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
frame.setMinimumSize(new Dimension(500, 500));
frame.pack();
frame.setVisible(true);
exitButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e)
{
int exitButton = JOptionPane.YES_NO_OPTION;
exitButton = JOptionPane.showConfirmDialog(null, "Are you sure you want to exit?", "Warning", JOptionPane.YES_NO_OPTION);
if (exitButton == JOptionPane.YES_OPTION)
{
System.exit(0);
}
}
});
}
//Main Menu GUI setup
public static void main(String[] args)
{
new MainMenu();
}