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

标签 java swing class program-entry-point

这是我第一次在这个网站上寻求帮助。我需要从 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() 类(它是主类)并使 public static void main(String[] args) 看起来像这样:

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

它运行时没有任何错误,但没有显示任何内容:(

请帮助我,如何将其移至 GRandom() 类,或制作另一个类

最佳答案

这是一种方法。

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

}

关于java - 如何使 JFrame 和 JMenubar 不在 public static void main(String[] args) 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61697757/

相关文章:

Java JFrame 椭圆之间的距离不相等

java - 桌面 UI 设计工具,最好是 Java 或 Java 包装器

java - 未重新绘制的图

python - 为什么我的实例会发生变化?

javascript - 类概念 SAPUI5

java - JPA 存储库 - 一对多 - 删除一个子项时出现问题

java - 将每个二进制数转换为 8 个字符的字符串

c++ - win32 编程 C++

java - 是否可以在 spring boot 中创建一个通用的 CRUD

java - Eclipse 在哪里存储项目/包等?