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

问题描述 投票:0回答:2

这是我第一次在这个网站上寻求帮助。我需要将JFrame和JMenubar从public static void main(String[] args)中移出。

    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()类中(它的主类),并使public static void main(String[] args)看起来像这样。

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

它的工作没有任何错误,但没有任何显示:(

请帮助我,如何把它移到GRandom()类中,或者做另一个类。

java class main
2个回答
0
投票

这是一种方法。

它有助于将你的代码分离成方法。 这样一来,你就可以一次专注于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;
    }

}
© www.soinside.com 2019 - 2024. All rights reserved.