我正在尝试编写一个简单的 Paint 应用程序,在该应用程序中,用户将能够JFrames使用绘图面板打开新的(在新线程中),并且这些框架中的每一个都会JMenuBar在顶部有一个,但是,只有最后一个打开的框架具有功能菜单栏,所有剩余的(打开的)框架都显示菜单,但菜单不起作用(单击时没有任何反应)。有谁知道如何解决这一问题?我已经简化了代码,只留下关于JMenuBar.代码由以下类组成:主.javapackage sample;public class Main { Main() { MainFrameThread.getMainFrameThread().run(); }//end of Main() public static void main(String[] args) { new Main(); }}//end of Main classTopMenu.javapackage 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 JMenuBarMainFrameThread.javapackage 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动作控制器.javapackage 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,什么都没有。有人看错了吗???
1 回答
UYOU
TA贡献1878条经验 获得超4个赞
然而,只有最后一个打开的框架有一个功能菜单栏
Swing 组件不能共享。Swing 组件只能有一个父组件。因此,对于每个子窗口,您都需要创建一个新的JMenuBarandJMenu和JMenuItem。
但是,Action使用的JMenuItem可以共享。
private static JMenuItem menu_New;
public static JMenuItem getMenu_New() {
return menu_New;
}
与菜单相关的变量或方法都不应该是静态的。同样,您需要为每个创建一个唯一的实例。
添加回答
举报
0/150
提交
取消