为MenuBar而不是MenuItems工作的助记符

时间:2018-04-26 18:00:04

标签: java menuitem menubar mnemonics

我的程序有一个菜单栏,其中有一个名为“文件”的菜单。在文件菜单中有4个选项:“新建”,“暂停”,“取消暂停”和“退出”。所有这五个都分配了助记符,但只有一个文件以我希望的方式工作。

其他四个工作,但它们只有在我首先激活File的助记符时才有效。即要激活“新建”,我需要按 Alt + F Alt + N 。我不认为助记符会以这种方式工作,但我可能会弄错。

这是我目前的代码,也许有人可以指出我做错了什么。

   //MENU BAR
   private JMenuBar menuBar;
   private JMenu fileMenu;
   private JMenuItem newGame;
   private JMenuItem pauseGame;
   private JMenuItem unpauseGame;
   private JMenuItem exitGame;


    //CREATE THE FILE MENU
   public void buildMenuBar(){

      //INITIAILIZE
      menuBar = new JMenuBar();

      //BUILD FILE MENU
      buildFileMenu();

      //ADD TO MENU BAR
      menuBar.add(fileMenu);

      //SET
      setJMenuBar(menuBar);

   }

   public void buildFileMenu(){

      //INITIALIZE
      fileMenu = new JMenu("File");
      newGame = new JMenuItem("New");
      pauseGame = new JMenuItem("Pause");
      unpauseGame = new JMenuItem("Unpause");
      exitGame = new JMenuItem("Exit");

      //MNEMONICS
      fileMenu.setMnemonic(KeyEvent.VK_F);    
      newGame.setMnemonic(KeyEvent.VK_N);
      pauseGame.setMnemonic(KeyEvent.VK_P);
      unpauseGame.setMnemonic(KeyEvent.VK_U);
      exitGame.setMnemonic(KeyEvent.VK_X);

      //LISTENERS
      newGame.addActionListener(new MenuListener());
      exitGame.addActionListener(new MenuListener());

      //ADD TO FILEMENU
      fileMenu.add(newGame);      
      fileMenu.add(pauseGame);
      fileMenu.add(unpauseGame);
      fileMenu.add(exitGame);
   }

1 个答案:

答案 0 :(得分:1)

所以我要回答我自己的问题。我已经知道像我这样的助记符只是在菜单处于活动状态时才使用。这就是他们为“文件”选项而不是“新游戏”选项工作的原因,除非文件选项已经打开。它运作正常,而不是我理解它的运作方式。