java 为按钮创建键盘快捷键

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/16477549/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-31 23:04:43  来源:igfitidea点击:

Create a keyboard shortcut for a button

javaswing

提问by Sajad

I have a JTablethat has a delete button to delete its rows.

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

I want to create a shortcut, for example when user selects a row and presses the 'Delete' button on keyboard , that line should be deleted.

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

My line is deleted with my JButton1perfectly.

我的行被我的JButton1完美删除了。

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

           // Delete row Method
    }

But it doesn't work.

但它不起作用。

回答by mKorbel

  • don't to use KeyListener for this job, and in Swing never, use KeyBindings instead

  • add ListSelectionListener to JTable, notice to test if(table.getSelectedRow > 0)

  • use KeyBindings for JTable, override Delete key

  • 不要将 KeyListener 用于这项工作,并且在 Swing 中永远不要使用 KeyBindings

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

  • 对 JTable 使用 KeyBindings,覆盖 Delete 键

回答by johnchen902

I don't know what is the exact problem because you provide too few code. However, you can't use getSource()to test which key is typed (pressed, or released). Use getKeyChar()and getKeyCode().

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



The following is explanation of my code:

以下是我的代码的解释:

  1. You need to add a KeyListenerto a component(of course)
  2. The component must have focus
    1. The component must be focusable (set focusable to true)
    2. The component need to request for focus
  3. Override keyTypedkeyPressedor keyReleasedto retrieve KeyEvent
    1. To check which key is typed in keyTyped, use getKeyChar()
    2. To check which key is pressed or released in keyPressedand keyReleased, use getKeyCode()
  1. 您需要向KeyListener组件添加一个(当然)
  2. 组件必须有焦点
    1. 组件必须是可聚焦的(将focusable 设置为true)
    2. 组件需要请求焦点
  3. 覆盖keyTypedkeyPressedkeyReleased检索KeyEvent
    1. 要检查输入的是哪个键keyTyped,请使用getKeyChar()
    2. 要检查在keyPressedand 中按下或释放哪个键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() == '7') {
                // 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");
            }
        }
    }
}

回答by Mikel Urkia

Take a look to this page:

看看这个页面:

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

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

Taken from there:

取自那里:

Create a key listener for that button (it seems you have already made that):

为该按钮创建一个键侦听器(您似乎已经这样做了):

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

And implement the keylistener:

并实现密钥侦听器:

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

Try it and tell me if it works.

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