Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations derfloh on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

How to display the Status of the Locking Keys on a Status bar 1

Status
Not open for further replies.

karlomutschler

Programmer
Jun 5, 2001
75
DE
Hi all,

The follwing code compiles fine and the status of the Locking Keys (Caps, Num & Scroll) are displayed on the StatusBar.

However, when the respective keys are pressed the display does not change eg from Caps Off to Caps On.

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;
import javax.swing.border.*;

public class StatusBar extends JFrame {

//Object Variables
JTextField messageField;
JTextField userField;
JTextField dateLongField;
JTextField capsLockField;
JTextField numLockField;
JTextField scrollLockField;
JTextField timeField;
Toolkit toolkit = Toolkit.getDefaultToolkit();

public StatusBar() {
super("Status Bar");

addKeyListener(new CapsLockKeyListener());
addKeyListener(new NumLockKeyListener());
addKeyListener(new ScrollLockKeyListener());

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Container contentPane = getContentPane();
Border raisedBorder = new BevelBorder(BevelBorder.RAISED);
Border loweredBorder = new BevelBorder(BevelBorder.LOWERED);
Border emptyBorder = new EmptyBorder(2, 2, 2, 2);

//StatusBar
Box sbar = Box.createHorizontalBox();
messageField = new JTextField(30);
messageField.setBackground(Color.LIGHT_GRAY);
messageField.setBorder(new CompoundBorder(loweredBorder, emptyBorder));

userField = new JTextField(12);
userField.setText("Karlo Mutschler");
userField.setBackground(Color.LIGHT_GRAY);
userField.setBorder(new CompoundBorder(loweredBorder, emptyBorder));

dateLongField = new JTextField(18);
dateLongField.setText("Donnerstag, 31. November 2002");
dateLongField.setBackground(Color.LIGHT_GRAY);
dateLongField.setBorder(new CompoundBorder(loweredBorder, emptyBorder));

capsLockField = new JTextField(5);
// capsLockField.setText("Caps On");
if (toolkit.getLockingKeyState(KeyEvent.VK_CAPS_LOCK)) {
capsLockField.setText("Caps On");
} else {
capsLockField.setText("Caps Off");
}
capsLockField.setBackground(Color.LIGHT_GRAY);
capsLockField.setBorder(new CompoundBorder(loweredBorder, emptyBorder));

numLockField = new JTextField(5);
// numLockField.setText("Num On");
if (toolkit.getLockingKeyState(KeyEvent.VK_NUM_LOCK)) {
numLockField.setText("Num On");
} else {
numLockField.setText("Num Off");
}
numLockField.setBackground(Color.LIGHT_GRAY);
numLockField.setBorder(new CompoundBorder(loweredBorder, emptyBorder));

scrollLockField = new JTextField(5);
// scrollLockField.setText("Scroll On");
if (toolkit.getLockingKeyState(KeyEvent.VK_SCROLL_LOCK)) {
scrollLockField.setText("Scroll On");
} else {
scrollLockField.setText("Scroll Off");
}
scrollLockField.setBackground(Color.LIGHT_GRAY);
scrollLockField.setBorder(new CompoundBorder(loweredBorder, emptyBorder));

timeField = new JTextField(5);
timeField.setText("23:47");
timeField.setBackground(Color.LIGHT_GRAY);
timeField.setBorder(new CompoundBorder(loweredBorder, emptyBorder));

messageField.setEditable(false);
sbar.add(messageField);
sbar.add(Box.createGlue());
userField.setEditable(false);
sbar.add(userField);
dateLongField.setEditable(false);
sbar.add(dateLongField);
capsLockField.setEditable(false);
sbar.add(capsLockField);
numLockField.setEditable(false);
sbar.add(numLockField);
scrollLockField.setEditable(false);
sbar.add(scrollLockField);
timeField.setEditable(false);
sbar.add(timeField);

sbar.setBorder(new CompoundBorder(raisedBorder, emptyBorder));

contentPane.add(sbar, BorderLayout.SOUTH);
}
public static void main(String[] arguments) {
StatusBar sb = new StatusBar();
sb.setVisible(true);
sb.setExtendedState(Frame.MAXIMIZED_BOTH);
}

//Inner Classes

class CapsLockKeyListener extends KeyAdapter {
public void keyPressed(KeyEvent e) {
System.out.println("Caps Lock");
if (toolkit.getLockingKeyState(KeyEvent.VK_CAPS_LOCK)){
capsLockField.setText("Caps On");
} else {
capsLockField.setText("Caps Off");
}
}
}

class NumLockKeyListener extends KeyAdapter {
public void keyPressed(KeyEvent e){
System.out.println("Num Lock");
if(toolkit.getLockingKeyState(KeyEvent.VK_NUM_LOCK)){
numLockField.setText("Num On");
} else {
numLockField.setText("Num Off");
}
}
}

class ScrollLockKeyListener extends KeyAdapter {
public void keyPressed(KeyEvent e){
System.out.println("Scroll Lock");
if(toolkit.getLockingKeyState(KeyEvent.VK_SCROLL_LOCK)){
scrollLockField.setText("Scroll On");
} else {
scrollLockField.setText("Scroll Off");
}
}
}
}

Any help is much appreciated
Kind regards.
Karlo meistertools@gmx.net
 
Hi,

When a key is pressed the current "in focus" component is called to raise the "key event" to any of it's listeners. In your case each of the TextFields are focusable (by default they are on instantiation), so you will have to stipulate that they are not focusable. This is done by calling the setFocusable(false) on each; e.g:

messageField.setFocusable(false);

do this to each component.

Consider if your application has a text input panel, at some time the user will select this to enter text. As keys are pressed events will be sent to any KeyListener of this TextField, NOT to your parent frame. It may therefore be necessary to create a dedicated MainFrameKeyListener which can be called from internal components.

BTW, you needn't have three separate KeyListener adapters, use one, and in the method test the KeyEvent.getKeyCode value in a switch statement.. e.g.

switch(e.getKeyCode()) {
case KeyEvent.VK_CAPS_LOCK: {
System.out.println("Caps Lock Pressed");
if (toolkit.getLockingKeyState(KeyEvent.VK_CAPS_LOCK)){
capsLockField.setText("Caps On");
} else {
capsLockField.setText("Caps Off");
}
break;
}
case KeyEvent.VK_NUM_LOCK: {
System.out.println("Num Lock Pressed");
if (toolkit.getLockingKeyState(KeyEvent.VK_NUM_LOCK)){
numLockField.setText("Num On");
} else {
numLockField.setText("Num Off");
}
break;
}
case KeyEvent.VK_SCROLL_LOCK: {
System.out.println("Scroll Lock Pressed");
if (toolkit.getLockingKeyState(KeyEvent.VK_SCROLL_LOCK)){
scrollLockField.setText("Scroll On");
} else {
scrollLockField.setText("Scroll Off");
}
break;
}

default: {
// i.e. any other key press...
// nothing to do
}
}



 
Hi,
thank you for your valued response.

Kind regards
Karlo meistertools@gmx.net
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top