Sajad
Sajad

Reputation: 2363

Create a shortcut in JFrame

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

But, when i press delete button, not see the "Key \"Delete\" Pressed" message!

Upvotes: 1

Views: 3661

Answers (2)

aterai
aterai

Reputation: 9808

  • JRootPane + KeyBindings(As @mKorbel has already said)

    String KEY = "UserPageAction";
    f.getRootPane().getActionMap().put(KEY, action);
    InputMap im = f.getRootPane().getInputMap();
    im.put(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0), KEY);
    
  • Also check out: 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);
  }
}

Upvotes: 3

mKorbel
mKorbel

Reputation: 109815

Upvotes: 5

Related Questions