给Java菜单、按钮设置快捷键

在图形用户界面(GUI)应用中,快捷键可以显著提高用户的操作效率,尤其是对于频繁使用的功能。通过快捷键,用户可以快速触发按钮事件,而不必每次都使用鼠标点击。

给Java按钮设置快捷键的方法有多种:使用setMnemonic方法、使用Action类、使用InputMapActionMap类。

一、使用setMnemonic方法

setMnemonic方法是Java Swing中为按钮设置快捷键的常用方法。该方法将按钮与一个特定的键盘按键关联,用户按下Alt键加上指定的按键即可触发按钮事件。

这种设置不适合之处就是一定要加上一个Alt键才行,JMenu,JButton都可用
jButton.setMnemonic(KeyEvent.VK_ENTER); 
这是一种较简单的,快捷键是按Alt+enter回车键。 

示例1

import javax.swing.JButton;  
import java.awt.event.KeyEvent;  
  
public class ShortcutExample {  
    public static void main(String[] args) {  
        JButton button = new JButton("Click Me");  
        button.setMnemonic(KeyEvent.VK_C); // 设置快捷键为Alt+C  
    }  
}  

注意:使用setMnemonic方法时,快捷键只有在按钮处于焦点状态时才有效,且必须与Alt键组合使用。 

示例2

创建了一个名为“Click Me”的按钮,并使用 setMnemonic 方法将其助记键设置为'C'。当用户按下 Alt+C 时,按钮将被触发。

import javax.swing.JButton;
import javax.swing.JFrame;

public class MnemonicExample {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Mnemonic Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(300, 200);

        JButton button = new JButton("Click Me");
        button.setMnemonic('C'); // 设置助记键为 'C'
        frame.add(button);

        frame.setVisible(true);
    }
}

若是设置类似“Ctrl+某键”的快捷键方式,JButton不可用,可以直接: 

jMenu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_R , KeyEvent.CTRL_MASK))

二、使用registerKeyboardAction方法

registerKeyboardAction方法提供了更灵活的快捷键绑定方式,可以指定具体的按键组合和触发条件。

jButton.registerKeyboardAction(this, KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,0),JComponent.WHEN_IN_FOCUSED_WINDOW);

示例1

创建一个实现 Action 接口的类,并定义相关操作

import javax.swing.JButton;
import javax.swing.KeyStroke;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;

public class Main {
    public static void main(String[] args) {
        JButton button = new JButton("Click Me");
        button.registerKeyboardAction(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("Button clicked!");
            }
        }, KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), JButton.WHEN_IN_FOCUSED_WINDOW);
    }
}

参数说明

  • ActionListener:触发快捷键时执行的动作。
  • KeyStroke:指定的按键组合。
  • WHEN_IN_FOCUSED_WINDOW:触发条件,表示在窗口获得焦点时有效。

三、使用 Action 类

Action 是一个接口,允许我们将操作绑定到多个事件源上,例如按钮和菜单项。通过使用 Action 类,我们可以将快捷键绑定到按钮上。

创建一个实现 Action 接口的类,并定义相关操作。

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JFrame;
import java.awt.event.ActionEvent;
public class ActionExample {
    public static void main(String[] args) {
        
        JFrame frame = new JFrame("Action Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(300, 200);
        
        Action action = new AbstractAction("Click Me") {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("Button clicked!");
            }
        };
        action.putValue(Action.MNEMONIC_KEY, (int) 'C'); // 设置助记键为 'C'
        
        JButton button = new JButton(action);
        frame.add(button);
        
        frame.setVisible(true);
    }
}

四、使用 InputMap 和 ActionMap 类

InputMapActionMap 类允许我们为组件定义更复杂的快捷键绑定,包括组合键和自定义键绑定。

获取按钮的 InputMapActionMap,然后定义快捷键绑定。

创建了一个按钮,然后定义了一个 AbstractAction 类来处理按钮点击事件。接着,我们使用 getInputMapgetActionMap 方法获取按钮的 InputMapActionMap,并将快捷键绑定到 ctrl C 组合键上。当用户按下 Ctrl+C 时,按钮将被触发。

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.KeyStroke;
import java.awt.event.ActionEvent;

public class InputMapExample {
    public static void main(String[] args) {

        JFrame frame = new JFrame("InputMap Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(300, 200);

        JButton button = new JButton("Click Me");
        Action action = new AbstractAction() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("Button clicked!");
            }
        };

button.getInputMap(JButton.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("ctrl C"), "clickAction");

        button.getActionMap().put("clickAction", action);

        frame.add(button);
        frame.setVisible(true);
    }
}
五、结合ActionListenerMouseListenerKeyListener

Java Swing中创建一个带有快捷键的按钮,并添加多种事件监听器。

import javax.swing.JFrame;  
import javax.swing.JButton;  
import java.awt.BorderLayout;  
import java.awt.event.KeyEvent;  
import java.awt.event.ActionListener;  
import java.awt.event.ActionEvent;  
import java.awt.event.MouseListener;  
import java.awt.event.MouseEvent;  
import java.awt.event.KeyListener;  
  
public class ShortcutExample extends JFrame {  
    public ShortcutExample() {  
        JButton button = new JButton("Click Me");  
        button.setMnemonic(KeyEvent.VK_C); // 设置快捷键为Alt+C  
  
        button.addActionListener(new ActionListener() {  
            @Override  
            public void actionPerformed(ActionEvent e) {  
                System.out.println("Button clicked!");  
            }  
        });  
  
        button.addMouseListener(new MouseListener() {  
            @Override  
            public void mouseClicked(MouseEvent e) {  
                System.out.println("Mouse clicked!");  
            }  
  
            @Override  
            public void mousePressed(MouseEvent e) {}  
  
            @Override  
            public void mouseReleased(MouseEvent e) {}  
  
            @Override  
            public void mouseEntered(MouseEvent e) {}  
  
            @Override  
            public void mouseExited(MouseEvent e) {}  
        });  
  
        button.addKeyListener(new KeyListener() {  
            @Override  
            public void keyTyped(KeyEvent e) {}  
  
            @Override  
            public void keyPressed(KeyEvent e) {  
                System.out.println("Key pressed: " + e.getKeyChar());  
            }  
  
            @Override  
            public void keyReleased(KeyEvent e) {}  
        });  
  
        this.setLayout(new BorderLayout());  
        this.add(button, BorderLayout.CENTER);  
        this.setSize(300, 200);  
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
        this.setVisible(true);  
    }  
  
    public static void main(String[] args) {  
        new ShortcutExample();  
    }  
}  

常用的快捷键:

  • Alt + /:自动补全代码,如mainsyso等。
  • Ctrl + /:注释或取消注释当前行。
  • Ctrl + Shift + /:块注释。
  • Ctrl + Shift + F:自动调整代码格式。
  • Ctrl + Shift + Enter:在当前行之前插入空白行。
  • Alt + 方向键:移动当前行。
  • Ctrl + Shift + O:管理导入语句。
  • Ctrl + D:删除当前行。
  • Ctrl + Alt + (Up/Down):向上或向下复制当前行。

你可能感兴趣的:(java,开发语言)