如何使 JFrame 和 JMenubar 不在 public static void main(String[] args)

How to make JFrame and JMenubar not in public static void main(String[] args)

这是我第一次在此站点上寻求帮助。我需要从 public static void main(String[] args).

移动 JFrame 和 JMenubar
    public static void main(String[] args){
    ResourceBundle res = ResourceBundle.getBundle("georglider.grandom.lang.lang");
    JFrame F = new JFrame(res.getString("GRandom"));
    F.setContentPane(new GRandom().JP1);
    F.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    F.pack();
    F.setVisible(true);
    F.setSize(300,163);
    F.setResizable(false);

    JMenuBar gmenu = new JMenuBar();

    JMenu Mode = new JMenu("Режим");
    JMenu Display = new JMenu("После генерации");
    JMenu GenerateOptions = new JMenu("Опции для генерации");

    gmenu.add(Mode);
    gmenu.add(Display);
    gmenu.add(GenerateOptions);

    Icon dicon = new Icon() {
        @Override
        public void paintIcon(Component c, Graphics g, int x, int y) {

        }

        @Override
        public int getIconWidth() {
            return 0;
        }

        @Override
        public int getIconHeight() {
            return 0;
        }
    };

    //M = Menu | D = Display | GO = GenerateOptions
    JRadioButtonMenuItem Mnumbers = new JRadioButtonMenuItem("Генерировать числа",dicon,true);
    Mnumbers.setActionCommand("Mnumbers");
    JRadioButtonMenuItem Mstring = new JRadioButtonMenuItem("Генерировать заданные строки");
    Mstring.setActionCommand("Mstring");

    JRadioButtonMenuItem Ddefault = new JRadioButtonMenuItem("По умолчанию",dicon,true);
    Ddefault.setActionCommand("Ddefault");
    JRadioButtonMenuItem Dopen = new JRadioButtonMenuItem("Открыть файл");
    Dopen.setActionCommand("Dopen");
    JRadioButtonMenuItem Dshowhere = new JRadioButtonMenuItem("Показать здесь");
    Dshowhere.setActionCommand("Dshowhere");

    JRadioButtonMenuItem GOninclude = new JRadioButtonMenuItem("Не включать числа");
    Dshowhere.setActionCommand("GOninclude");

    Mode.add(Mnumbers);
    Mode.add(Mstring);
    Display.add(Ddefault);
    Display.add(Dopen);
    Display.add(Dshowhere);
    GenerateOptions.add(GOninclude);

    F.setJMenuBar(gmenu);
}

这是代码,我需要从 public static void main(String[] args)

我试图将其移动到 GRandom() class(它是主要的 class)并使 public static void main(String[] args) 看起来像这样:

public static void main(String[] args)
{
    JFrame.setDefaultLookAndFeelDecorated(true);
    new JMenuTest();
}

运行没有任何错误,但没有任何显示:(

请帮帮我,如何将它移动到 GRandom() class,或者制作另一个

这是一种方法。

这有助于将您的代码分成多个方法。这样,您可以一次专注于 GUI 的一部分。

必须按特定顺序调用 JFrame 方法。这是我在所有 Swing 应用程序中使用的顺序。

我不得不为此在我的计算机上 运行 注释掉一些代码。

import java.awt.Component;
import java.awt.Graphics;
import java.util.ResourceBundle;

import javax.swing.Icon;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.SwingUtilities;

public class JFrameExample implements Runnable {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new JFrameExample());
    }

    @Override
    public void run() {
//      ResourceBundle res = ResourceBundle.getBundle(
//              "georglider.grandom.lang.lang");
//      JFrame frame = new JFrame(res.getString("GRandom"));
        JFrame frame = new JFrame("JFrame Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setJMenuBar(createMenu());

        frame.pack();
        frame.setSize(400, 200);
        frame.setResizable(false);
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    private JMenuBar createMenu() {
        JMenuBar gmenu = new JMenuBar();

        JMenu Mode = new JMenu("Режим");
        JMenu Display = new JMenu("После генерации");
        JMenu GenerateOptions = new JMenu("Опции для генерации");

        // M = Menu | D = Display | GO = GenerateOptions
        JRadioButtonMenuItem Mnumbers = 
                new JRadioButtonMenuItem("Генерировать числа", 
                        createIcon(), true);
        Mnumbers.setActionCommand("Mnumbers");
        JRadioButtonMenuItem Mstring = 
                new JRadioButtonMenuItem(
                        "Генерировать заданные строки");
        Mstring.setActionCommand("Mstring");

        JRadioButtonMenuItem Ddefault = 
                new JRadioButtonMenuItem("По умолчанию", 
                        createIcon(), true);
        Ddefault.setActionCommand("Ddefault");
        JRadioButtonMenuItem Dopen = 
                new JRadioButtonMenuItem("Открыть файл");
        Dopen.setActionCommand("Dopen");
        JRadioButtonMenuItem Dshowhere = 
                new JRadioButtonMenuItem("Показать здесь");
        Dshowhere.setActionCommand("Dshowhere");

        JRadioButtonMenuItem GOninclude = 
                new JRadioButtonMenuItem("Не включать числа");
        Dshowhere.setActionCommand("GOninclude");

        Mode.add(Mnumbers);
        Mode.add(Mstring);
        Display.add(Ddefault);
        Display.add(Dopen);
        Display.add(Dshowhere);
        GenerateOptions.add(GOninclude);

        gmenu.add(Mode);
        gmenu.add(Display);
        gmenu.add(GenerateOptions);

        return gmenu;
    }

    private Icon createIcon() {
        Icon dicon = new Icon() {
            @Override
            public void paintIcon(Component c, 
                    Graphics g, int x, int y) {

            }

            @Override
            public int getIconWidth() {
                return 0;
            }

            @Override
            public int getIconHeight() {
                return 0;
            }
        };

        return dicon;
    }

}