我正在创建一个小应用程序,如果按下大写锁定按钮,它将添加一个托盘图标。我收到一个似乎无法修复的错误。
这是我的代码
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
public void keyPressed(KeyEvent ke){
//removed for StackOverflow
}
}
我在 keyPressed 监听器上收到“非法表达式开始”错误 现在这可能是一个 super 简单的修复,我只是不知道。
最佳答案
KeyListener
仅当其注册的组件可聚焦且具有焦点时才会被激活。如果 UI 有其他组件(如按钮或文本字段),那么它将无法工作。
我假设您想知道大写锁定状态何时发生变化,无论程序中的焦点是什么。为此,您可以使用 Toolkit
注册 AWTListener
并监视应用程序处理的所有关键流量。
使用此监听器,您可以监视 KeyEvent.VK_CAPS_LOCK
按键事件并采取适当的操作。
如果您需要知道大写锁定键的确切状态,可以使用Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK)
来确定它是打开还是关闭...
import java.awt.AWTEvent;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridBagLayout;
import java.awt.Toolkit;
import java.awt.event.AWTEventListener;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class TestListener {
public static void main(String[] args) {
new TestListener();
}
public TestListener() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
private JLabel capsStateLabel;
public TestPane() {
setLayout(new GridBagLayout());
capsStateLabel = new JLabel();
add(capsStateLabel);
updateLabelState();
Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() {
@Override
public void eventDispatched(AWTEvent event) {
if (event instanceof KeyEvent) {
KeyEvent ke = (KeyEvent) event;
switch (ke.getKeyCode()) {
case KeyEvent.VK_CAPS_LOCK:
switch (ke.getID()) {
case KeyEvent.KEY_PRESSED:
case KeyEvent.KEY_RELEASED:
updateLabelState();
break;
}
break;
}
}
}
}, KeyEvent.KEY_EVENT_MASK);
}
protected void updateLabelState() {
boolean capsState = Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK);
if (capsState) {
capsStateLabel.setText("Caps is ON");
} else {
capsStateLabel.setText("Caps is OFF");
}
}
@Override
public Dimension getPreferredSize() {
return new Dimension(200, 200);
}
}
}
关于java - 按下按钮后的 KeyListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27026053/