【发布时间】:2015-03-14 17:39:13
【问题描述】:
好吧,我有以下代码来检查大写锁定的状态,当我在表单中使用 focu 更改大写锁定的状态时没有问题,但是当我最小化表单并更改大写锁定的状态时返回最大化表格不更新大写锁定的状态。有什么想法吗?
/**
*
* @author joepa37
*/
public class FocusExample extends javax.swing.JFrame {
public FocusExample() {
initComponents();
}
@SuppressWarnings("unchecked")
private void initComponents() {
capsLockLbl = new javax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
addFocusListener(new java.awt.event.FocusAdapter() {
public void focusGained(java.awt.event.FocusEvent evt) {
formFocusGained(evt);
}
});
addKeyListener(new java.awt.event.KeyAdapter() {
public void keyPressed(java.awt.event.KeyEvent evt) {
formKeyPressed(evt);
}
});
getContentPane().setLayout(new java.awt.GridLayout());
capsLockLbl.setText("CAPS LOCK : ");
getContentPane().add(capsLockLbl);
pack();
}
private void formKeyPressed(java.awt.event.KeyEvent evt) {
if (evt.getKeyCode() == java.awt.event.KeyEvent.VK_CAPS_LOCK) {
updateStatus();
}
}
private void formFocusGained(java.awt.event.FocusEvent evt) {
updateStatus();
}
private void updateStatus(){
boolean isCapsLockOn = java.awt.Toolkit.getDefaultToolkit ().getLockingKeyState ( java.awt.event.KeyEvent.VK_CAPS_LOCK );
capsLockLbl.setText(isCapsLockOn ? "CAPS LOCK ON" : "CAPS LOCK OFF");
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new FocusExample().setVisible(true);
}
});
}
private javax.swing.JLabel capsLockLbl;
}
【问题讨论】:
-
杀死
KeyListener,改为探测Toolkit#getLockingKeyState! -
作为记录,
Toolkit#getLockingKeyState不会解决这个问题,因为它只会在 Java 窗口处于活动状态并具有焦点时更新。 (烦人,但出于安全原因这样做。)使用 Toolkit API 仍然比KeyListener方法更好,但不足以解决这个特定问题。 -
类似问题..如果有人有解决方案...请帮助stackoverflow.com/questions/61359316/…