【问题标题】:Create a shortcut in JFrame在 JFrame 中创建快捷方式
【发布时间】:2013-05-17 07:13:13
【问题描述】:
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" 消息!

【问题讨论】:

    标签: java swing jframe keylistener


    【解决方案1】:

    【讨论】:

      【解决方案2】:
      • JRootPane + KeyBindings(正如@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);
        }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-03-24
        • 2013-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-22
        • 2011-07-24
        相关资源
        最近更新 更多