Java JTextArea KeyListener

When I hit ENTER, my JTextArea will start a new line, and I just want to make the doClick () method nothing else. How can I do it?

textarea.addKeyListener(new KeyListener(){ @Override public void keyPressed(KeyEvent e){ if(e.getKeyCode() == KeyEvent.VK_ENTER){ button.doClick(); } } @Override public void keyTyped(KeyEvent e) { } @Override public void keyReleased(KeyEvent e) { } }); 
+7
java listener swing keylistener jlabel
source share
2 answers

Use .consume() :

Consumes this event so that it is not handled by default by the method of the source that created it.

 public void keyPressed(KeyEvent e){ if(e.getKeyCode() == KeyEvent.VK_ENTER){ e.consume(); button.doClick(); } } 

Documentation

+7
source share

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); } } 
+7
source share

All Articles