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
Create a keyboard shortcut for a button
提问by Sajad
I have a JTable
that 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 JButton1
perfectly.
我的行被我的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:
以下是我的代码的解释:
- You need to add a
KeyListener
to a component(of course) - The component must have focus
- The component must be focusable (set focusable to true)
- The component need to request for focus
- Override
keyTyped
keyPressed
orkeyReleased
to retrieveKeyEvent
- To check which key is typed in
keyTyped
, usegetKeyChar()
- To check which key is pressed or released in
keyPressed
andkeyReleased
, usegetKeyCode()
- To check which key is typed in
- 您需要向
KeyListener
组件添加一个(当然) - 组件必须有焦点
- 组件必须是可聚焦的(将focusable 设置为true)
- 组件需要请求焦点
- 覆盖
keyTyped
keyPressed
或keyReleased
检索KeyEvent
- 要检查输入的是哪个键
keyTyped
,请使用getKeyChar()
- 要检查在
keyPressed
and 中按下或释放哪个键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.
试试看,告诉我它是否有效。