在两个不同的 JFrame 中打开的相同菜单仅适用于最后一个

我正在尝试编写一个简单的 Paint 应用程序,在该应用程序中,用户将能够JFrames使用绘图面板打开新的(在新线程中),并且这些框架中的每一个都会JMenuBar在顶部有一个,但是,只有最后一个打开的框架具有功能菜单栏,所有剩余的(打开的)框架都显示菜单,但菜单不起作用(单击时没有任何反应)。有谁知道如何解决这一问题?


我已经简化了代码,只留下关于JMenuBar.


代码由以下类组成:


主.java


package sample;


public class Main {


    Main() {


        MainFrameThread.getMainFrameThread().run();


    }//end of Main()


    public static void main(String[] args) {

        new Main();

    }


}//end of Main class

TopMenu.java


package sample;


import javax.swing.*;


public class TopMenu extends JMenuBar {


    private JMenu menu_File;

    private static JMenuItem menu_New;


    public static JMenuItem getMenu_New() {

        return menu_New;

    }


    public TopMenu() {


        menu_File = new JMenu("File");

        menu_New = new JMenuItem("New");

        this.add(menu_File);

        menu_File.add(menu_New);


    }//end of TopMenu()


}//end of TopMenu extends JMenuBar

MainFrameThread.java


package sample;


public class MainFrameThread extends Thread {


    private static MainFrameThread mainFrameThread = new MainFrameThread();


    public static MainFrameThread getMainFrameThread() {

        return mainFrameThread;

    }


    public MainFrameThread() {}


    @Override

    public void run() {


        MainFrame mainFrame = new MainFrame();


    }//end of public void run()


}//end of public class FrameSizeDialogThread

动作控制器.java


package sample;


import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;


public class ActionController {


    private static ActionController actionController = new ActionController();

    private ListenForMenu listenForMenu = new ListenForMenu();


    public static ActionController getActionController() {

        return actionController;

    }


我被卡住了,不管我在哪里初始化 MainFrame.java,什么都没有。有人看错了吗???



30秒到达战场
浏览 90回答 1
1回答

UYOU

然而,只有最后一个打开的框架有一个功能菜单栏Swing 组件不能共享。Swing 组件只能有一个父组件。因此,对于每个子窗口,您都需要创建一个新的JMenuBarandJMenu和JMenuItem。但是,Action使用的JMenuItem可以共享。private static JMenuItem menu_New;public static JMenuItem getMenu_New() {    return menu_New;}与菜单相关的变量或方法都不应该是静态的。同样,您需要为每个创建一个唯一的实例。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java