JTextField में Enter दबाएं


103

क्या यह पता लगाना संभव है Enterकि जावा में JTextField टाइप करते समय कोई दबाता है ? बिना बटन बनाए और इसे डिफ़ॉल्ट के रूप में सेट करें।

जवाबों:


168

A JTextFieldको एक ActionListenerजैसे एक JButtonका उपयोग करने के लिए डिज़ाइन किया गया था । की addActionListener()विधि देखें JTextField

उदाहरण के लिए:

Action action = new AbstractAction()
{
    @Override
    public void actionPerformed(ActionEvent e)
    {
        System.out.println("some action");
    }
};

JTextField textField = new JTextField(10);
textField.addActionListener( action );

अब जब Enterकुंजी का उपयोग किया जाता है तो घटना को निकाल दिया जाता है।

इसके अलावा, एक अतिरिक्त लाभ यह है कि आप श्रोता को एक बटन के साथ साझा कर सकते हैं, भले ही आप बटन को डिफ़ॉल्ट बटन नहीं बनाना चाहते हों।

JButton button = new JButton("Do Something");
button.addActionListener( action );

ध्यान दें, यह उदाहरण एक का उपयोग करता है Action, जो लागू करता है ActionListenerक्योंकि Actionअतिरिक्त सुविधाओं के साथ एक नया एपीआई है। उदाहरण के लिए आप Actionटेक्स्ट फ़ील्ड और बटन दोनों के लिए ईवेंट को अक्षम कर सकते हैं ।


1
माना। सामान्य मामले में, मेरी तुलना में अधिक सुरुचिपूर्ण समाधान।
कोस

@camickr जावा झूलों का एक विशेषज्ञ है
मोहम्मद इक़ाज़स

23
JTextField function=new JTextField(8);   
function.addActionListener(new ActionListener(){

                public void actionPerformed(ActionEvent e){

                        //statements!!!

                }});

तुम सब करने की जरूरत है ऊपर की तरह JTextField के लिए AddActionListener है! आपके Enterद्वारा कार्रवाई करने के बाद, आप वही करेंगे जो आप कथन में चाहते हैं!


16

के लिए एक ईवेंट जोड़ें KeyPressed

private void jTextField1KeyPressed(java.awt.event.KeyEvent evt) {
  if(evt.getKeyCode() == KeyEvent.VK_ENTER) {
      // Enter was pressed. Your code goes here.
   }
} 

-1 :( KeyListeners वैसे भी स्विंग के दृष्टिकोण से बहुत कम स्तर हैं। एपीआई का उपयोग करें जो स्विंग के साथ उपयोग करने का इरादा है :-)
nIcE cOw

1
@nIcEcOw KeyListeners, स्विंग के दृष्टिकोण से निम्न स्तर का है : CITEDED ।
गुइडो

2
@ @: एक बहुत अच्छी तरह से प्रलेखित चीज़ , KeyBindings के आधिकारिक ट्यूटोरियल में पाया जा सकता है , हालांकि स्टैकओवरफ्लो पर बहुत अच्छा जवाब , एक ही पहलू को भी शामिल करता है :-)
nIcE cOw

1
@nIcEcOw मेरे दिमाग में था कि बिल्कुल डॉक्टर पृष्ठ है। मैं शॉर्टकट और कार्यों के लिए बाइंडिंग पसंद करने के सुझाव के बीच बहुत अंतर पाता हूं , केवल कम-स्तर पर कीबोर्ड को नियंत्रित करने के लिए श्रोताओं का उपयोग करते हैं , और इसका उपयोग न करें क्योंकि यह गलत एपीआई है । डॉक्टर पृष्ठ इतना काला-सफ़ेद भी नहीं है।
गुइडो

1
@ @: KeyListenersकई कमियाँ हैं, जिनके द्वारा अधिक हद तक देखभाल की जाती है KeyBindings, जैसे, फ़ोकस संबंधित, कॉपी / पेस्ट संबंधित और कई और। तुच्छ कार्यों के लिए इसे टाला जाना चाहिए, जैसे कि ओपी में कहा गया है।
nIcE cOw

9

क्या आप ऐसा कुछ करना चाहते हैं?

JTextField mTextField = new JTextField();
    mTextField.addKeyListener(new KeyAdapter() {
        @Override
        public void keyPressed(KeyEvent e) {
            if(e.getKeyCode() == KeyEvent.VK_ENTER){
                // something like...
               //mTextField.getText();
               // or...
               //mButton.doClick();
            }
        }

    });

1

पहले JButton या JTextField पर कार्रवाई कमांड जोड़ें:

JButton.setActionCommand("name of command");
JTextField.setActionCommand("name of command");

फिर JTextField और JButton दोनों के लिए ActionListener जोड़ें।

JButton.addActionListener(listener);
JTextField.addActionListener(listener);

उसके बाद, आप पर ActionListener कार्यान्वयन लिखते हैं

@Override
public void actionPerformed(ActionEvent e)
{
    String actionCommand = e.getActionCommand();

    if(actionCommand.equals("Your actionCommand for JButton") || actionCommand.equals("Your   actionCommand for press Enter"))
    {
        //Do something
    }
}

1

अन्य उत्तर (स्वीकृत लोगों सहित) अच्छे हैं, लेकिन यदि आप पहले से ही जावा 8 का उपयोग करते हैं, तो आप निम्न (कम, नए शब्दों में) कर सकते हैं:

textField.addActionListener(
    ae -> {
        //dostuff
    }
);

जैसा कि स्वीकृत उत्तर में बताया गया है, आप बस एक के साथ प्रतिक्रिया कर सकते हैं ActionListener, जो एंटर-की पकड़ता है।

हालांकि, मेरा दृष्टिकोण कार्यात्मक अवधारणाओं का लाभ लेता है जो जावा 8 में पेश किया गया था।

यदि आप एक बटन और JTextField के लिए उदाहरण के लिए एक ही क्रिया का उपयोग करना चाहते हैं, तो आप निम्न कार्य कर सकते हैं:

ActionListener l = ae -> {
    //do stuff
}

button.addActionListener(l);
textField.addActionListener(l);

यदि आगे स्पष्टीकरण की आवश्यकता है, तो कृपया मुझे बताएं!


0

यदि आप JTextField में एक डिफ़ॉल्ट बटन कार्रवाई सेट करना चाहते हैं, तो आपको यह करना होगा:

//put this after initComponents();

textField.addActionListener(button.getActionListeners()[0]);

यह [0] है क्योंकि एक बटन में बहुत सारी क्रियाएं हो सकती हैं, लेकिन आम तौर पर सिर्फ एक (ActionPerformed) होती है।


0

अपने फ़्रेम में प्रत्येक टेक्स्ट फ़ील्ड के लिए, AddKeyListener विधि को लागू करें। तब लागू करें और keyPressed विधि को ओवरराइड करें, जैसा कि अन्य ने संकेत दिया है। अब आप अपनी कार्रवाई को सक्रिय करने के लिए अपने फ़्रेम में किसी भी फ़ील्ड से एंटर दबा सकते हैं।

@Override
        public void keyPressed(KeyEvent e) {
            if(e.getKeyCode() == KeyEvent.VK_ENTER){
                //perform action
            }
        }

-2
public void keyReleased(KeyEvent e)
{
    int key=e.getKeyCode();
    if(e.getSource()==textField)
    {
        if(key==KeyEvent.VK_ENTER)
        { 
            Toolkit.getDefaultToolkit().beep();
            textField_1.requestFocusInWindow();                     
        }
    }

'एंटर प्रेस' के लिए तर्क लिखने के लिए JTextField, तर्क को keyReleased()ब्लॉक के अंदर रखना बेहतर है keyTyped()& के बजाय keyPressed()


1
-1 :( उसी गलती को फिर से दोहराने के लिए, जो पहले से ही पिछले जवाबों में डाउन-वोट किया गया है, उसी के लिए निर्दिष्ट के साथ। KeyListenersइस तरह से निम्न स्तर के Swingदृष्टिकोण से भी निम्न स्तर का उपयोग करें। Swing :-) के साथ प्रयोग किया जाता है
nIcE cOw

-3

बस इस कोड का उपयोग करें:

SwingUtilities.getRootPane(myButton).setDefaultButton(myButton);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.