2012-08-08 50 views
1

我們知道我們可以在setaccelerator()方法的幫助下調用一個菜單項,其中需要兩個擊鍵的組合。如果我想通過一次按鍵來調用菜單項,該怎麼辦......這裏是我遇到的問題用一個按鍵調用MenuItem

menuitem=new JMenuItem("Delete"); 
menuitem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE);   
menu.add(menuitem); 

請幫忙.... !!

+3

您是否希望在用戶進入菜單或者他們能夠在任何地方點擊某個鍵並且發生相同的功能時發生這種情況?如果是第二個,我會建議使用Key Bindings並直接調用動作。 – 2012-08-08 02:07:54

回答

3

檢查How to Use Menus瞭解詳情。下面是一個使用Action的例子,它定義了加速器。您也可以在菜單項上設置加速器,即:item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0));

import java.awt.Component; 
import java.awt.Dimension; 
import java.awt.event.ActionEvent; 
import java.awt.event.KeyEvent; 

import javax.swing.*; 

public class MenuDemo { 

    public static void main(String[] args) { 
     javax.swing.SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       final JFrame frame = new JFrame("Demo"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

       JMenuBar menuBar = new JMenuBar(); 
       JMenu menu = new JMenu("Menu"); 
       menuBar.add(menu); 

       JMenuItem item = new JMenuItem(new TestAction(frame)); 

       menu.add(item); 

       frame.setJMenuBar(menuBar); 

       frame.setSize(new Dimension(300, 300)); 
       frame.setLocationByPlatform(true); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    static class TestAction extends AbstractAction { 
     private Component parent; 

     public TestAction(Component parent) { 
      super("Test"); 
      this.parent = parent; 
      putValue(Action.ACCELERATOR_KEY, 
        KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0)); 
     } 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      JOptionPane.showMessageDialog(parent, "Test"); 
     } 
    } 
} 
相關問題