You must use KeyBindings with any JTextComponent . KeyListeners is too low in terms of Swing . You are using a concept that has been linked to AWT , Swing uses KeyBindings to accomplish the same task with greater efficiency and gives the desired results KeyBindings
A small program for your help:
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class KeyBindingExample { private static final String key = "ENTER"; private KeyStroke keyStroke; private JButton button; private JTextArea textArea; private Action wrapper = new AbstractAction() { @Override public void actionPerformed(ActionEvent ae) { button.doClick(); } }; private void displayGUI() { JFrame frame = new JFrame("Key Binding Example"); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); JPanel contentPane = new JPanel(new BorderLayout(5, 5)); textArea = new JTextArea(10, 10); keyStroke = KeyStroke.getKeyStroke(key); Object actionKey = textArea.getInputMap( JComponent.WHEN_FOCUSED).get(keyStroke); textArea.getActionMap().put(actionKey, wrapper); button = new JButton("Click Me!"); button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent ae) { System.out.format("Button Clicked :-)%n"); } }); contentPane.add(textArea, BorderLayout.CENTER); contentPane.add(button, BorderLayout.PAGE_END); frame.setContentPane(contentPane); frame.pack(); frame.setLocationByPlatform(true); frame.setVisible(true); } public static void main(String[] args) { Runnable r = new Runnable() { @Override public void run() { new KeyBindingExample().displayGUI(); } }; EventQueue.invokeLater(r); } }
nIcE cOw
source share