2012-08-08 5 views
1

Мы знаем, что мы можем вызвать элемент меню с помощью метода setaccelerator(), где требуется комбинация двух нажатий клавиш. что, если я хочу, чтобы вызвать пункт меню только одним нажатием клавиши ... вот где я имею немного проблемыВызов элемента MenuItem с одним нажатием клавиши

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

Пожалуйста, помогите .... !!

+3

Вы хотите, чтобы это произошло, когда пользователь находится в Меню, или просто чтобы иметь возможность ударить ключ в любом месте, и те же функции выполняются? Если это вторая, я бы предложил использовать ключевые привязки и сразу вызвать действие. –

ответ

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"); 
     } 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^