1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
| public class LockingKeyWatcher {
private static final EventListenerList eventListeners = new EventListenerList();
static {
DefaultKeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(new KeyEventDispatcher() {
@Override
public boolean dispatchKeyEvent(KeyEvent e) {
if ( e.getID()==KeyEvent.KEY_PRESSED && e.getKeyCode()==KeyEvent.VK_NUM_LOCK ) {
fireEvent(getLockingKeyState());
}
return false;
}
});
}
public static boolean getLockingKeyState() {
return Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_NUM_LOCK);
}
public static void setLockingKeyState(boolean on) {
Toolkit.getDefaultToolkit().setLockingKeyState(KeyEvent.VK_NUM_LOCK, on);
}
public static void addLockingKeyStateChange(ILockingKeyStateChangeListener listener) {
eventListeners.add(ILockingKeyStateChangeListener.class, listener);
}
public static void removeLockingKeyStateChange(ILockingKeyStateChangeListener listener) {
eventListeners.remove(ILockingKeyStateChangeListener.class, listener);
}
private static void fireEvent(boolean lockingKeyState) {
for(ILockingKeyStateChangeListener listener : eventListeners.getListeners(ILockingKeyStateChangeListener.class)) {
listener.change(lockingKeyState);
}
}
public static interface ILockingKeyStateChangeListener extends EventListener {
void change(boolean lockingKeyState);
}
public static void main(String[] args) {
JFrame frame = new JFrame("Démo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel(new GridBagLayout());
JLabel prompt = new JLabel("Mon champ : ");
JFormattedTextField field = new JFormattedTextField(new NumberFormatter());
JLabel label = new JLabel();
label.setForeground(Color.RED);
GridBagConstraints gbc = new GridBagConstraints(0,0,1,1,0,0,GridBagConstraints.BASELINE,GridBagConstraints.NONE,new Insets(2,2,2,2),0,0);
panel.add(prompt,gbc);
gbc.gridx=2;
panel.add(label,gbc);
gbc.gridx=1;
gbc.fill=GridBagConstraints.HORIZONTAL;
gbc.weightx=1;
panel.add(field,gbc);
frame.add(panel, BorderLayout.CENTER);
LockingKeyWatcher.addLockingKeyStateChange(e-> {
updateLockingKeyStateLabel(label);
});
updateLockingKeyStateLabel(label);
JButton button = new JButton("Num Locked");
button.addActionListener(e-> LockingKeyWatcher.setLockingKeyState(!LockingKeyWatcher.getLockingKeyState()));
LockingKeyWatcher.addLockingKeyStateChange(e-> {
updateLockingKeyStateButton(button);
});
updateLockingKeyStateButton(button);
frame.add(button, BorderLayout.SOUTH);
frame.setSize(300, 200);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
private static void updateLockingKeyStateLabel(JLabel label) {
if ( LockingKeyWatcher.getLockingKeyState() ) {
label.setText("");
}
else {
label.setText("Num. désac.");
}
//label.revalidate();
//label.repaint();
}
private static void updateLockingKeyStateButton(JButton button) {
if ( LockingKeyWatcher.getLockingKeyState() ) {
button.setText("Déverrouiller clavier numérique");
}
else {
button.setText("Verrouiller clavier numérique");
}
}
} |
Partager