2013-05-17 4 views
1
public final class UserPage extends JFrame{ 
public UserPage() { 
this.addKeyListener(new myclass()); 
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
this.setSize(1000, 600); 
this.setLocation(300, 60); 
this.setResizable(false); 
this.setVisible(true); 
} 
. 
. 
. 
    public class myclass extends KeyAdapter{ 
    @Override 
    public void keyPressed(KeyEvent e) { 
     if (e.getKeyCode() == KeyEvent.VK_DELETE) { 
      System.out.println("Key \"Delete\" Pressed"); 
     } 
    } 
} 
} 

하지만 삭제 버튼을 누르면 "Key \"Delete \ "Press"메시지가 표시되지 않습니다! 기본적으로바로 가기 만들기

답변

3
    을 사용하는 수준의 추상화를 높이 사용 JMenuItem를 # setAccelerator (...)

    JMenuItem item = new JMenuItem(action); 
    item.setAccelerator(KeyStroke.getKeyStroke(
        KeyEvent.VK_DELETE, InputEvent.CTRL_DOWN_MASK)); 
    

SSCCE

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
public class UserPageTest { 
    public static JMenuBar makeMenuBar() { 
    JMenuBar bar = new JMenuBar(); 
    JMenu menu = new JMenu("Test"); 
    JMenuItem item = new JMenuItem(action); 
    item.setAccelerator(KeyStroke.getKeyStroke(
     KeyEvent.VK_DELETE, InputEvent.CTRL_DOWN_MASK)); 
    menu.add(item); 
    bar.add(menu); 
    return bar; 
    } 
    public static Action action = new AbstractAction("UserPage?") { 
    @Override public void actionPerformed(ActionEvent e) { 
     System.out.println("UserPage Action"); 
    } 
    }; 
    public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     @Override public void run() { createAndShowGUI(); } 
    }); 
    } 
    public static void createAndShowGUI() { 
    JFrame f = new JFrame(); 

    String KEY = "UserPageAction"; 
    f.getRootPane().getActionMap().put(KEY, action); 
    InputMap im = f.getRootPane().getInputMap(); 
    im.put(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0), KEY); 

    f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
    f.setJMenuBar(makeMenuBar()); 
    f.setSize(320, 240); 
    f.setLocationRelativeTo(null); 
    f.setVisible(true); 
    } 
} 
을 :
  • 의 JRootPane + 키 바인딩은

    String KEY = "UserPageAction"; 
    f.getRootPane().getActionMap().put(KEY, action); 
    InputMap im = f.getRootPane().getInputMap(); 
    im.put(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0), KEY); 
    
  • 가 또한 확인 (@mKorbel을 갖는 이미 있음)