为按钮创建键盘快捷键

我有一个JTable ,它有一个删除按钮来删除它的行。

我想创建一个快捷方式,例如当用户选择一行并按下键盘上的“删除”按钮时,该行应该被删除。

我的JButton1完全删除了我的JButton1

  if (e.getSource() == KeyEvent.VK_DELETE) { // Delete row Method } 

但它不起作用。

我不知道究竟是什么问题,因为你提供的代码太少了。 但是,您不能使用getSource()来测试键入(按下或释放)哪个键。 使用getKeyChar()getKeyCode()


以下是我的代码的解释:

  1. 您需要将KeyListener添加到组件(当然)
  2. 组件必须具有焦点
    1. 组件必须是可聚焦的(将焦点设置为true)
    2. 该组件需要请求焦点
  3. 覆盖keyTyped keyPressedkeyReleased以检索KeyEvent
    1. 要检查keyTyped键入的keyTyped ,请使用getKeyChar()
    2. 要检查keyPressedkeyReleased按下或释放的keyReleased ,请使用getKeyCode()

 import java.awt.*; import javax.swing.*; import java.awt.event.*; public class Test { public static void main(String[] args) { JFrame f = new JFrame(); f.setSize(new Dimension(410, 330)); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.getContentPane().setLayout(null); JPanel panel = new JPanel(); panel.setBackground(Color.GREEN); panel.setBounds(50, 50, 300, 200); panel.addKeyListener(new MyKeyListener()); // add KeyListener panel.setFocusable(true); // set focusable to true panel.requestFocusInWindow(); // request focus f.getContentPane().add(panel); f.setVisible(true); } static class MyKeyListener extends KeyAdapter { @Override public void keyTyped(KeyEvent e) { if (e.getKeyChar() == '\177') { // delete row method (when "delete" is typed) System.out.println("Key \"Delete\" Typed"); } } @Override public void keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_DELETE) { // delete row method (when "delete" is pressed) System.out.println("Key \"Delete\" Pressed"); } } @Override public void keyReleased(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_DELETE) { // delete row method (when "delete" is released) System.out.println("Key \"Delete\" Released"); } } } } 
  • 不要将KeyListener用于此作业,而在Swing never中,请改用KeyBindings

  • 将ListSelectionListener添加到JTable,注意测试if(table.getSelectedRow > 0)

  • 使用KeyBindings for JTable,覆盖Delete键

看看这个页面:

http://www.coderanch.com/t/341332/GUI/java/setting-keyboard-navigation-shortcut-keys

从那里采取:

为该按钮创建一个关键监听器(看起来你已经做过了):

 Button btn = new Button("Press Me"); btn.addKeyListener(myKeyListener); 

并实现keylistener:

 public void keyPressed(KeyEvent e) { if(e.getKeyCode() == KeyEvent.VK_DELETE ){ //Do whatever you want } } 

试一试,告诉我它是否有效。