2013-08-28 13 views
7

जब मैंने अपना JTextArea एंटर दबाया तो एक नई पंक्ति शुरू होती है और मैं केवल doClick() विधि को और कुछ नहीं करना चाहता हूं। मुझे यह कैसे करना चाहिए?जावा JTextArea KeyListener

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) { 
    } 
}); 
+2

का उपयोग नहीं करते keyListeners बिल्कुल (यह सोचकर कि आपका कोड संभवतः कैसे काम कर सकता है: आपके पास _focusable_ लेबल हैं? कितना अजीब और उपयोगकर्ता भ्रमित ...) - कुंजीबिंडिंग का उपयोग करें – kleopatra

उत्तर

7

उपयोग .consume():

इस घटना की खपत इतना है कि यह स्रोत है जो यह जन्म से डिफ़ॉल्ट ढंग से क्रियान्वित नहीं किया जाएगा।

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

Documentation

+0

धन्यवाद यह काम करता है। –

+0

@ PéterSzakács उत्कृष्ट! मैं खुशी से मदद कर सकता है। –

+1

कुंजी श्रोता का उपयोग न करें। स्विंग को कुंजी बाइंडिंग के साथ इस्तेमाल करने के लिए डिज़ाइन किया गया था। 'कीबाइंडिंग्स' और 'एसएससीसीई' के लिए – camickr

7

आप प्रश्न में किसी भी JTextComponent साथ KeyBindings उपयोग करना चाहिए। KeyListenersSwing के परिप्रेक्ष्य से बहुत कम स्तर है। तुम्हें पता है, अवधारणा है जो AWT से संबंधित था का उपयोग कर रहे SwingKeyBindings का उपयोग करता है और अधिक कुशलता के साथ एक ही काम करने के लिए और वांछित परिणाम आपकी मदद के लिए :-)

एक छोटा सा कार्यक्रम प्रदान करता है:

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

+1 – Reimeus

संबंधित मुद्दे