2013-05-17 3 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 \ «Pressed»!Создать ярлык в JFrame

ответ

3
  • JRootPane + комбинации клавиш (как @mKorbel уже сказал)

    String KEY = "UserPageAction"; 
    f.getRootPane().getActionMap().put(KEY, action); 
    InputMap im = f.getRootPane().getInputMap(); 
    im.put(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0), KEY); 
    
  • Также проверьте: 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); 
    } 
} 
5
  • JFrame (all Top-Level Containers) по умолчанию никогда не реагировать на KeyEvents, должны использовать этот Listener для JComponent они должны consume Focus, или можно пометить его с setFocusable()

  • не использовать low_level KeyListener для свинга JComponents, если можно затем использовать высота уровень абстракции, чтобы использовать KeyBindings вместо

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