首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java Swing 快捷鍵機制詳解:Mnemonic 與 Accelerator 的區別與實作

     編輯:Java 相關知識

Swing 提供兩種鍵盤快捷機制:Mnemonic(助記符) 與 Accelerator(加速鍵)。前者用於標籤/按鈕文字下劃線字母,配合 Alt 聚焦關聯組件;後者用於選單項直接觸發動作,支援任意修飾鍵組合。本文通過完整範例演示 Mnemonic 核心 API 用法。

核心 API:JLabel.setDisplayedMnemonic / setLabelFor

JTextField firstField = new JTextField(10);
JLabel firstLabel = new JLabel("First Name", JLabel.RIGHT);
firstLabel.setDisplayedMnemonic('F');        // 指定助記符字母
firstLabel.setLabelFor(firstField);          // 關聯目標組件:按 Alt+F 聚焦 firstField

處理重複字母:setDisplayedMnemonicIndex

「Middle Initial」有兩個 'I',預設下劃第一個。JDK 1.4+ 提供:

JLabel middleLabel = new JLabel("Middle Initial", JLabel.RIGHT);
middleLabel.setDisplayedMnemonic('I');
middleLabel.setDisplayedMnemonicIndex(7); // 指定第 7 個字元(從 0 計)下劃線
middleLabel.setLabelFor(middleField);

完整可運行範例

import javax.swing.*;
import java.awt.*;

public class MnemonicLabels {
    public static void main(String[] args) {
        JTextField firstField = new JTextField(10);
        JTextField middleField = new JTextField(10);
        JTextField lastField = new JTextField(10);

        JLabel firstLabel = new JLabel("First Name", JLabel.RIGHT);
        firstLabel.setDisplayedMnemonic('F');
        firstLabel.setLabelFor(firstField);

        JLabel middleLabel = new JLabel("Middle Initial", JLabel.RIGHT);
        middleLabel.setDisplayedMnemonic('I');
        middleLabel.setDisplayedMnemonicIndex(7); // JDK 1.4+
        middleLabel.setLabelFor(middleField);

        JLabel lastLabel = new JLabel("Last Name", JLabel.RIGHT);
        lastLabel.setDisplayedMnemonic('L');
        lastLabel.setLabelFor(lastField);

        JPanel p = new JPanel(new GridLayout(3, 2, 5, 5));
        p.add(firstLabel); p.add(firstField);
        p.add(middleLabel); p.add(middleField);
        p.add(lastLabel); p.add(lastField);

        JFrame f = new JFrame("MnemonicLabels");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setContentPane(p);
        f.pack();
        f.setVisible(true);
    }
}

程式碼圖示

運行效果

編譯執行後,分別按 Alt+F、Alt+I、Alt+L,焦點將在三個文字欄位間切換。標籤對應字母會顯示下劃線(Windows/Linux 下明顯,Mac 霻看 L&F 支援)。

補充:Mnemonic vs Accelerator

特性Mnemonic (助記符)Accelerator (加速鍵)
適用對象JLabel、JButton、JCheckBox 等有文字的組件JMenuItem、Action
觸發方式Alt + 指定字母可配置任意組合(Ctrl+S、F5 等)
行為將焦點移至 setLabelFor 指定組件直接觸發 actionPerformed
APIsetDisplayedMnemonic(char)
setLabelFor(Component)
setAccelerator(KeyStroke)

Accelerator 範例

JMenuItem saveItem = new JMenuItem("Save");
saveItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_DOWN_MASK));
saveItem.addActionListener(e -> save());

善用 Mnemonic 提升表單操作效率,用 Accelerator 加速選單操作,兩者互補構建鍵盤友好介面。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved