2012-12-14 23 views
20

मेरे पास एक खोज शब्द दर्ज करने के लिए टेक्स्टफिल्ड है, और "गो" के लिए एक बटन है। लेकिन जावाएफएक्स 2 में, मैं इसे कैसे बनाऊंगा ताकि टेक्स्टफिल्ड में एंटर कुंजी दबाकर कोई कार्रवाई कर सके?मैं JavaFX2 में दबाए गए एंटर कुंजी को कैसे उठा सकता हूं?

धन्यवाद :)

+0

जावाडोक इस तरह के सवालों के लिए एक अच्छा स्रोत है: http://docs.oracle.com/javafx/2/api/javafx/scene/control/TextField.html – Puce

उत्तर

26

आप टेक्स्टफिल्ड के ऑनएक्शन विशेषता का उपयोग कर सकते हैं और इसे अपने नियंत्रक में एक विधि से बांध सकते हैं।

@FXML 
public void onEnter(ActionEvent ae){ 
    System.out.println("test") ; 
} 

और अपने FXML फ़ाइल में:

<TextField fx:id="textfield" layoutX="29.0" layoutY="298.0" onAction="#onEnter" prefWidth="121.0" /> 
+1

हां, ऑनएक्शन विधि जाने का तरीका प्रतीत होता है: http://docs.oracle.com/javafx/2/api/javafx/scene/control/TextField.html#onActionProperty -> +1 लेकिन आपको एनोटेट करने की आवश्यकता है @FXML के साथ ऑनएन्टर() विधि जब FXML से "बाध्यकारी" हो और उसे एक्शनवेन्ट तर्क, AFAIK लेना होगा। – Puce

+0

और कोड से आप textfield.setOnAction() - विधि –

+0

ध्यान दें कि मुझे काम करने से पहले 'ऑनएन्टर' पर पैरामीटर के रूप में '(ActionEvent actionEvent)' जोड़ना था। – Erhannis

52

मैं यह सोचते कर रहा हूँ आप ऐसा करने के लिए जब उपयोगकर्ता प्रेस केवल जबकि TextField ध्यान केंद्रित किया प्रवेश करना चाहते हैं। आप उपयोग KeyEvent javafx.scene.input से बाहर चाहता हूँ और कुछ इस तरह करते हैं ...

textField.setOnKeyPressed(new EventHandler<KeyEvent>() 
    { 
     @Override 
     public void handle(KeyEvent ke) 
     { 
      if (ke.getCode().equals(KeyCode.ENTER)) 
      { 
       doSomething(); 
      } 
     } 
    }); 

आशा इस उपयोगी है!

+6

ध्यान दें कि जब जावा लैम्ब्डा अंकन का उपयोग उपरोक्त कोड के रूप में लिखा जा सकता है: 'textArea.setOnKeyPressed ((घटना) -> { अगर (event.getCode() == KeyCode.ENTER) { DoSomething(); }});' – gbmhunter

+0

मैं इस बारे में सोच FXML का उपयोग करने से भी बेहतर जवाब है। – SleepyFox89

7

आप कोशिश कर सकते हैं निम्नलिखित:

@FXML 
public void buttonPressed(KeyEvent e) 
{ 
    if(e.getCode().toString().equals("ENTER")) 
    { 
     //do something 
    } 
} 
+8

बेहतर उपयोग: 'ke.getCode() == KeyCode.ENTER' क्योंकि यह enum – user6133180

+0

है यह अकेले काम नहीं करता है, इसके लिए FXML क्या है? – Baxtex

1

यह काम करता है:

@FXML public TextField txt; 

@FXML 
public void textAction(KeyEvent e){ 

    if(e.getCode().equals(KeyCode.ENTER)) 
     System.out.println(txt.getText()); 
} 

अगर किसी कारण .getCode के लिए () काम नहीं कर रहा है, सुनिश्चित करें कि आप पुस्तकालय आयात करते हैं:

import javafx.scene.input.KeyEvent; 

नहीं

import java.awt.event.KeyEvent; 

मैं इस पर पकड़ा गया और यह परेशान था। मैं बस एक ही नाव में उन सभी के लिए इसे पारित कर रहा हूँ।

4

सीधे शब्दों में "लैम्ब्डा अभिव्यक्ति" का उपयोग कर:

TextField textField = new TextField(); 
textField.setOnAction(e -> { 
    // add your code to be run here 
    System.out.println("textFile"); 
    }); 
0

कुछ कीबोर्ड आप '\ n' और '\ r' अक्षर के लिए अतिरिक्त परीक्षण डाल करने के लिए है पर।

if(event.getCode().equals(KeyCode.ENTER) || event.getCharacter().getBytes()[0] == '\n' || event.getCharacter().getBytes()[0] == '\r') { 
     // your action 
    }