如何从另一个 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 以正确遵循驼峰格式并避免以后混淆。

您当前的代码有几个问题。

  1. 通过在 main 方法中创建 JFrame 容器,可以防止 UI 在实例化 MainMenu 时出现 -也就是说,UI 只会在 JVM 调用 main 方法时显示任何内容。为了解决这个问题,我将你的 JFrame instantiation/setup 移到了 MainMenu 的构造函数中。

  2. MainMenuclass中,mainMenuJPanel从不实例化。这意味着您当前的代码实际上并未在 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();
}