为按钮创建键盘快捷键
我有一个JTable
,它有一个删除按钮来删除它的行。
我想创建一个快捷方式,例如当用户选择一行并按下键盘上的“删除”按钮时,该行应该被删除。
我的JButton1
完全删除了我的JButton1
。
if (e.getSource() == KeyEvent.VK_DELETE) { // Delete row Method }
但它不起作用。
我不知道究竟是什么问题,因为你提供的代码太少了。 但是,您不能使用getSource()
来测试键入(按下或释放)哪个键。 使用getKeyChar()
和getKeyCode()
。
以下是我的代码的解释:
- 您需要将
KeyListener
添加到组件(当然) - 组件必须具有焦点
- 组件必须是可聚焦的(将焦点设置为true)
- 该组件需要请求焦点
- 覆盖
keyTyped
keyPressed
或keyReleased
以检索KeyEvent
- 要检查
keyTyped
键入的keyTyped
,请使用getKeyChar()
- 要检查
keyPressed
和keyReleased
按下或释放的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 } }
试一试,告诉我它是否有效。