April 10, 2009

Published April 10, 2009 by

Turn On / Off Num Lock, Caps Lock, Scroll Lock Programmatically

Method setLockingKeyState(int keyCode, boolean on) of class Toolkit is used to on or off the locking key programmatically. It sets the state of the given locking key on the keyboard. Valid key codes are VK_CAPS_LOCK, VK_NUM_LOCK, VK_SCROLL_LOCK, and VK_KANA_LOCK.

A sample Java program is given here which you can use to control the state of num lock, caps lock and scroll lock. Using the program you can on or off the locking keys. Even if you change the key state from the program or from the other programs, the user interface will be changed accordingly.

The output screen of the program is as below:




Some important lines of code in the program are

Toolkit toolkit = Toolkit.getDefaultToolkit();
toolkit.setLockingKeyState(KeyEvent.VK_NUM_LOCK,true);
toolkit.setLockingKeyState(KeyEvent.VK_CAPS_LOCK,true);
toolkit.setLockingKeyState(KeyEvent.VK_SCROLL_LOCK,true);


These lines of code on the locking keys. If you want to off a locking key just write false instead of true.

The full coding of the program is given below. The program checks the locking key states at first and select the appropriate radio buttons. If you press a particular radio button the locking key in the keyboard will be affected. If you change the state from the keyboard, the radio buttons’ state will be changed automatically.


import java.awt.Toolkit;
import java.awt.event.KeyEvent;

import javax.swing.ButtonGroup;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JRadioButton;
import javax.swing.WindowConstants;

public class OnOffLockingKey extends JDialog {

    public OnOffLockingKey(java.awt.Frame parent, boolean modal) {
        super(parent, modal);
        initComponents();

        LockingKeyStateChecker lockingKeyStateChecker = new LockingKeyStateChecker();
        lockingKeyStateChecker.start();

    }

    private void initComponents() {

        ButtonGroup numLockButtonGroup = new ButtonGroup();
        ButtonGroup capsLockButtonGroup = new ButtonGroup();
        ButtonGroup scrollLockButtonGroup = new ButtonGroup();
        lblNumLock = new JLabel();
        rdbNumLockOn = new JRadioButton();
        rdbNumLockOff = new JRadioButton();
        lblCapsLock = new JLabel();
        rdbCapsLockOn = new JRadioButton();
        rdbCapsLockOff = new JRadioButton();
        lblScrollLock = new JLabel();
        rdbScrollLockOn = new JRadioButton();
        rdbScrollLockOff = new JRadioButton();

        numLockButtonGroup.add(rdbNumLockOn);
        numLockButtonGroup.add(rdbNumLockOff);

        capsLockButtonGroup.add(rdbCapsLockOn);
        capsLockButtonGroup.add(rdbCapsLockOff);

        scrollLockButtonGroup.add(rdbScrollLockOn);
        scrollLockButtonGroup.add(rdbScrollLockOff);

        setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("On - Off Locking Key");
        getContentPane().setLayout(new java.awt.GridLayout(0, 3, 5, 5));

        lblNumLock.setText("Num Lock");
        getContentPane().add(lblNumLock);

        rdbNumLockOn.setSelected(true);
        rdbNumLockOn.setText("On");
        rdbNumLockOn.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                rdbNumLockOnActionPerformed(evt);
            }
        });
        getContentPane().add(rdbNumLockOn);

        rdbNumLockOff.setText("Off");
        rdbNumLockOff.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                rdbNumLockOffActionPerformed(evt);
            }
        });
        getContentPane().add(rdbNumLockOff);

        lblCapsLock.setText("Caps Lock");
        getContentPane().add(lblCapsLock);

        rdbCapsLockOn.setText("On");
        rdbCapsLockOn.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                rdbCapsLockOnActionPerformed(evt);
            }
        });
        getContentPane().add(rdbCapsLockOn);

        rdbCapsLockOff.setSelected(true);
        rdbCapsLockOff.setText("Off");
        rdbCapsLockOff.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                rdbCapsLockOffActionPerformed(evt);
            }
        });
        getContentPane().add(rdbCapsLockOff);

        lblScrollLock.setText("Scroll Lock");
        getContentPane().add(lblScrollLock);

        rdbScrollLockOn.setText("On");
        rdbScrollLockOn.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                rdbScrollLockOnActionPerformed(evt);
            }
        });
        getContentPane().add(rdbScrollLockOn);

        rdbScrollLockOff.setSelected(true);
        rdbScrollLockOff.setText("Off");
        rdbScrollLockOff.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                rdbScrollLockOffActionPerformed(evt);
            }
        });
        getContentPane().add(rdbScrollLockOff);

        pack();
    }//

    private void rdbNumLockOnActionPerformed(java.awt.event.ActionEvent evt) {
        toolkit.setLockingKeyState(KeyEvent.VK_NUM_LOCK, true);
    }

    private void rdbNumLockOffActionPerformed(java.awt.event.ActionEvent evt) {
        toolkit.setLockingKeyState(KeyEvent.VK_NUM_LOCK, false);
    }

    private void rdbCapsLockOnActionPerformed(java.awt.event.ActionEvent evt) {
        toolkit.setLockingKeyState(KeyEvent.VK_CAPS_LOCK, true);
    }

    private void rdbCapsLockOffActionPerformed(java.awt.event.ActionEvent evt) {
        toolkit.setLockingKeyState(KeyEvent.VK_CAPS_LOCK, false);
    }

    private void rdbScrollLockOnActionPerformed(java.awt.event.ActionEvent evt) {
        toolkit.setLockingKeyState(KeyEvent.VK_SCROLL_LOCK, true);
    }

    private void rdbScrollLockOffActionPerformed(java.awt.event.ActionEvent evt) {
        toolkit.setLockingKeyState(KeyEvent.VK_SCROLL_LOCK, false);
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                OnOffLockingKey dialog = new OnOffLockingKey(new JFrame(), true);
                dialog.addWindowListener(new java.awt.event.WindowAdapter() {
                    public void windowClosing(java.awt.event.WindowEvent e) {
                        System.exit(0);
                    }
                });
                dialog.setVisible(true);
            }
        });
    }

    private class LockingKeyStateChecker extends Thread {
        public void run() {
            while (true) {
                //Check the num lock state and change the UI accordingly
                boolean numLockKeyState = toolkit.getLockingKeyState(KeyEvent.VK_NUM_LOCK);
                if (numLockKeyState == true) {
                    rdbNumLockOn.setSelected(true);
                } else {
                    rdbNumLockOff.setSelected(true);
                }

                //Check the caps lock state and change the UI accordingly
                boolean capsLockKeyState = toolkit.getLockingKeyState(KeyEvent.VK_CAPS_LOCK);
                if (capsLockKeyState == true) {
                    rdbCapsLockOn.setSelected(true);
                } else {
                    rdbCapsLockOff.setSelected(true);
                }

                //Check the scroll lock state and change the UI accordingly
                boolean scrollLockKeyState = toolkit.getLockingKeyState(KeyEvent.VK_SCROLL_LOCK);
                if (scrollLockKeyState == true) {
                    rdbScrollLockOn.setSelected(true);
                } else {
                    rdbScrollLockOff.setSelected(true);
                }

            }
        }
    }

    // Variables declaration - do not modify
    private JLabel lblCapsLock;
    private JLabel lblNumLock;
    private JLabel lblScrollLock;
    private JRadioButton rdbCapsLockOff;
    private JRadioButton rdbCapsLockOn;
    private JRadioButton rdbNumLockOff;
    private JRadioButton rdbNumLockOn;
    private JRadioButton rdbScrollLockOff;
    private JRadioButton rdbScrollLockOn;
    private Toolkit toolkit = Toolkit.getDefaultToolkit();

}