为按钮创建键盘快捷键

时间:2013-05-10 07:55:03

标签: java swing

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

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

我的JButton1完全删除了我的行。

        if (e.getSource() == KeyEvent.VK_DELETE) {

           // Delete row Method
    }

但它不起作用。

3 个答案:

答案 0 :(得分:4)

  • 不要将KeyListener用于此作业,而在Swing never中,请使用KeyBindings

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

  • 使用JTB的KeyBindings,覆盖Delete键

答案 1 :(得分:2)

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


以下是对我的代码的解释:

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

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

答案 2 :(得分:2)

看看这个页面:

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
    }
}

尝试并告诉我它是否有效。