KeyListener após o botão ser pressionado

Estou criando um pequeno aplicativo que adicionará um ícone de bandeja se o botão Caps Lock for pressionado. Estou recebendo um erro que não consigo consertar.

Aqui está meu código

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { public void keyPressed(KeyEvent ke){ //removed for StackOverflow } } 

Estou recebendo o erro “Início ilegal da expressão” no keyPressed Listener Agora, esta é provavelmente uma correção super simples, eu simplesmente não sei.

KeyListener só será ativado se o componente para o qual ele está registrado for focável E tiver foco. Se a interface do usuário tiver algum outro componente (como um botão ou campo de texto), ela não funcionará.

Eu estou supondo que você quer saber sempre que o estado caps lock muda, independentemente do que possa ter foco em seu programa. Para esse fim, você pode registrar um AWTListener com o Toolkit e monitorar TODO o tráfego de chave que foi processado pelo seu aplicativo.

Com esse ouvinte, você pode monitorar o evento-chave KeyEvent.VK_CAPS_LOCK e tomar as medidas adequadas.

Se você precisar saber o estado exato da tecla caps lock, poderá usar o Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK) para determinar se está Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK) ou desativado …

 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); } } } 

Como alguns dos comentadores afirmaram, use um KeyListener vez disso:

 public class CtrlToIconListener implements KeyListener { private boolean displayed = false; // consumed public void keyTyped(KeyEvent e) {} // when the key is first pressed public void keyPressed(KeyEvent e) { // if the control key is pressed, handled it. if (e.getKeyCode() == KeyEvent.VK_CAPS_LOCK) { displayed = !displayed; } } // when the key is released public void keyReleased(KeyEvent e) { // do something clever } } 

Então você usaria essa class como um ouvinte para o seu jFrame (eu suponho que é o que você está usando)

mais informações: https://docs.oracle.com/javase/tutorial/uiswing/events/keylistener.html

    Intereting Posts