Sun Java Solaris Communities My SDN Account Join SDN
 
Tutorials

Program Challenge

 
New to Java Programming Center

Java Technology Fundamentals
December's Program Challenge
New to Java Programming Center

Java Platform Overview | Getting Started | Step-by-Step Programming
Learning Paths | References & Resources | Courses & Certification | Newsletters


The Toolkit class allows you to get and set the current status of the num lock, caps lock, and scroll lock keys (Kana lock, too, if you have a Kanji keyboard). Create a program with text input that shows the current status of these keys along a status bar along the bottom of the frame.

Possible Solution:

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

public class Locks {
   public static void main(String args[]) {
     Runnable runner = new Runnable() {
       public void run() {
         JFrame frame = new JFrame("Locks");
         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

         JTextArea textArea = new JTextArea();
         JScrollPane scrollPane = new JScrollPane(textArea);
         frame.add(scrollPane, BorderLayout.CENTER);

         // Create status bar with one label per watched locking key
         JPanel statusBar = new JPanel(new GridLayout(1, 3));
         final JLabel numLock = new JLabel("", JLabel.CENTER);
         statusBar.add(numLock);
         final JLabel capsLock = new JLabel("", JLabel.CENTER);
         statusBar.add(capsLock);
         final JLabel scrollLock = new JLabel("", JLabel.CENTER);
         statusBar.add(scrollLock);
     frame.add(statusBar, BorderLayout.SOUTH);

         setKeyStatus(numLock, KeyEvent.VK_NUM_LOCK, "Num");
         setKeyStatus(capsLock, KeyEvent.VK_CAPS_LOCK, "Caps");
         setKeyStatus(scrollLock, KeyEvent.VK_SCROLL_LOCK, "Scroll");

         KeyListener listener = new KeyAdapter() {
           public void keyPressed(KeyEvent keyEvent) {
             if (keyEvent.getKeyCode() == KeyEvent.VK_NUM_LOCK) {
               setKeyStatus(numLock, KeyEvent.VK_NUM_LOCK, "Num");
             } else if (keyEvent.getKeyCode() == KeyEvent.VK_CAPS_LOCK) {
               setKeyStatus(capsLock, KeyEvent.VK_CAPS_LOCK, "Caps");
             } else if (keyEvent.getKeyCode() == KeyEvent.VK_SCROLL_LOCK) {
               setKeyStatus(scrollLock, KeyEvent.VK_SCROLL_LOCK, "Scroll");
             }
           }
         };
         textArea.addKeyListener(listener);

         frame.setSize(250, 150);
         frame.setVisible(true);
       }
     };
     EventQueue.invokeLater(runner);
   }

   private static void setKeyStatus(JLabel label, int key, String prefix) {
     Toolkit toolkit = Toolkit.getDefaultToolkit();
     String status = (toolkit.getLockingKeyState(key) ? "On" : "Off");
     label.setText(prefix+status);
   }
}