क्या यह पता लगाना संभव है Enterकि जावा में JTextField टाइप करते समय कोई दबाता है ? बिना बटन बनाए और इसे डिफ़ॉल्ट के रूप में सेट करें।
क्या यह पता लगाना संभव है Enterकि जावा में JTextField टाइप करते समय कोई दबाता है ? बिना बटन बनाए और इसे डिफ़ॉल्ट के रूप में सेट करें।
जवाबों:
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
टेक्स्ट फ़ील्ड और बटन दोनों के लिए ईवेंट को अक्षम कर सकते हैं ।
JTextField function=new JTextField(8);
function.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
//statements!!!
}});
तुम सब करने की जरूरत है ऊपर की तरह JTextField के लिए AddActionListener है! आपके Enterद्वारा कार्रवाई करने के बाद, आप वही करेंगे जो आप कथन में चाहते हैं!
के लिए एक ईवेंट जोड़ें KeyPressed
।
private void jTextField1KeyPressed(java.awt.event.KeyEvent evt) {
if(evt.getKeyCode() == KeyEvent.VK_ENTER) {
// Enter was pressed. Your code goes here.
}
}
KeyListeners
कई कमियाँ हैं, जिनके द्वारा अधिक हद तक देखभाल की जाती है KeyBindings
, जैसे, फ़ोकस संबंधित, कॉपी / पेस्ट संबंधित और कई और। तुच्छ कार्यों के लिए इसे टाला जाना चाहिए, जैसे कि ओपी में कहा गया है।
क्या आप ऐसा कुछ करना चाहते हैं?
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();
}
}
});
पहले 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
}
}
अन्य उत्तर (स्वीकृत लोगों सहित) अच्छे हैं, लेकिन यदि आप पहले से ही जावा 8 का उपयोग करते हैं, तो आप निम्न (कम, नए शब्दों में) कर सकते हैं:
textField.addActionListener(
ae -> {
//dostuff
}
);
जैसा कि स्वीकृत उत्तर में बताया गया है, आप बस एक के साथ प्रतिक्रिया कर सकते हैं ActionListener
, जो एंटर-की पकड़ता है।
हालांकि, मेरा दृष्टिकोण कार्यात्मक अवधारणाओं का लाभ लेता है जो जावा 8 में पेश किया गया था।
यदि आप एक बटन और JTextField के लिए उदाहरण के लिए एक ही क्रिया का उपयोग करना चाहते हैं, तो आप निम्न कार्य कर सकते हैं:
ActionListener l = ae -> {
//do stuff
}
button.addActionListener(l);
textField.addActionListener(l);
यदि आगे स्पष्टीकरण की आवश्यकता है, तो कृपया मुझे बताएं!
यदि आप JTextField में एक डिफ़ॉल्ट बटन कार्रवाई सेट करना चाहते हैं, तो आपको यह करना होगा:
//put this after initComponents();
textField.addActionListener(button.getActionListeners()[0]);
यह [0] है क्योंकि एक बटन में बहुत सारी क्रियाएं हो सकती हैं, लेकिन आम तौर पर सिर्फ एक (ActionPerformed) होती है।
अपने फ़्रेम में प्रत्येक टेक्स्ट फ़ील्ड के लिए, AddKeyListener विधि को लागू करें। तब लागू करें और keyPressed विधि को ओवरराइड करें, जैसा कि अन्य ने संकेत दिया है। अब आप अपनी कार्रवाई को सक्रिय करने के लिए अपने फ़्रेम में किसी भी फ़ील्ड से एंटर दबा सकते हैं।
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_ENTER){
//perform action
}
}
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()
।
KeyListeners
इस तरह से निम्न स्तर के Swing
दृष्टिकोण से भी निम्न स्तर का उपयोग करें। Swing
:-) के साथ प्रयोग किया जाता है
बस इस कोड का उपयोग करें:
SwingUtilities.getRootPane(myButton).setDefaultButton(myButton);