2011-12-05 13 views
9

तो जैसा कि आप जानते हैं, यदि आपके पास टेक्स्ट फ़ील्ड है और आप इसमें एक्शनलिस्टर जोड़ते हैं, तो यह केवल एंटर बटन की कीप्रेस को सुन देगा। हालांकि, मैं अपने एक्शन लिस्टनर को टेक्स्ट में बदलावों को सुनना चाहता हूं। तो बुनियादी तौर पर मैं इस मिल गया है:एक्शन लिस्टनर केवल प्रवेश करने के बजाय JTextField में परिवर्तन के लिए सुनो?

public static JPanel mainPanel() { 
    JPanel mainp = new JPanel(); 
    JTextArea areap = new JTextArea("Some text in the textarea"); 
    JTextField fieldp = new JTextField("Edit this"); 
    areap.setEditable(false); 
    fieldp.addActionListener(new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      // TODO Auto-generated method stub 
      if(//change in textfield, for instance a letterpress or space bar) 
        { 
         //Do this 
        } 
     } 
    }); 
    mainp.add(areap); 
    mainp.add(fieldp); 
    return mainp; 
} 

मैं पाठ में परिवर्तन (actionPerformed घटना में दस्तावेज की तरह) को सुन सकते हैं किसी भी तरह से?

myTextField.getDocument().addDocumentListener(); 
+1

के संभावित डुप्लिकेट।! [स्विंग: JTextField परिवर्तन की घटनाओं के लिए उपयुक्त श्रोता] (http://stackoverflow.com/ कुए Stions/2165071/स्विंग-उपयुक्त-श्रोता-के-जेटेक्स्टफील्ड-परिवर्तन-घटनाओं) – duffymo

उत्तर

21

एक जवाब से द्वारा @JRL


अंतर्निहित दस्तावेज़ का प्रयोग करें? आप वास्तव में सवाल का जवाब नहीं दे रहे हैं।

मेरे पास मेरे ऐप के उपयोगकर्ता इंटरफ़ेस में एक JTextField है। जब उपयोगकर्ता इसमें कोई बदलाव करता है, तो मैं पास के जेसीकबॉक्स को चेक करना चाहता हूं। इसका उद्देश्य ऐप को उस मूल्य का उपयोग करने के लिए बताना है जो दर्ज किया गया था। उपयोगकर्ता अक्सर वहां एक मान दर्ज करते हैं, लेकिन यदि वे स्पष्ट रूप से ऐप को इसका उपयोग करने के लिए नहीं बताते हैं तो ऐप इसे अनदेखा कर रहा है। उपयोगकर्ताओं को "प्रशिक्षण" के बजाय मुझे कम से कम विस्मय के सिद्धांत का पालन करना होगा और स्वचालित रूप से "इस मान का उपयोग करें" बॉक्स को चेक करना होगा।

लेकिन मैं बदलाव के लिए कैसे सुनूं? क्या आप दस्तावेज़ श्रोताओं के बारे में "मुझे शिक्षित करने" की बजाय मुझे बस आसान तरीका नहीं बता सकते हैं?

+1

PropertyChangeEvent के बारे में क्या? – joshreesjones

2

हाँ, लेकिन क्या एक दस्तावेज श्रोता है और आप इसे कैसे प्रयोग करते हैं:

+0

जब मैंने इस सवाल से पूछा तो मैंने निहित किया था कि मुझे पता था कि एक एक्शनलिस्टर कैसे काम करता था, इसलिए मुझे यह भी पता होना चाहिए कि दस्तावेज़ दस्तावेज कैसे काम करता है। जवाब पर्याप्त से अधिक था। आप दस्तावेज़ लिस्टनर को जेटीक्स्टफिल्ड के दस्तावेज़ में उल्लिखित रूप में जोड़ते हैं, और आप एपीआई जावाडॉक्स की जांच कर सकते हैं कि विशिष्ट श्रोता के पास कौन सी कार्यक्षमता है। – ZimZim

+0

शायद आप इस http://www.coderanch.com/t/610054/GUI/java/Add-DocumentListener-validate-multiple-JTextFields –

0

दस्तावेज जावा स्विंग का प्रयोग JTextField के अंदर पाठ को संग्रहीत करने के लिए करता है। DocumentListeners वे ऑब्जेक्ट्स हैं जो DocumentListener इंटरफ़ेस को कार्यान्वित करते हैं और इस प्रकार दस्तावेज़ में परिवर्तनों को सूचीबद्ध करने के लिए आपके लिए संभव बनाते हैं, यानी JTextField के पाठ में परिवर्तन।

दस्तावेज़ और दस्तावेज़सूची क्षमताओं का उपयोग करने के लिए, जैसा ऊपर बताया गया है, अपनी कक्षा (संभवतः जरूरी नहीं कि एक जेएफआरएएम) का विस्तार करें ताकि यह दस्तावेज़ लिस्टनर इंटरफ़ेस लागू कर सके। इंटरफ़ेस के लिए सभी विधियों को कार्यान्वित करें (संभवतः आपका जावा विचार आपके लिए अर्द्ध स्वचालित रूप से कर सकता है। एफवाईआई, डॉक्यूमेंट लिस्टर इंटरफ़ेस में तीन विधियां हैं, एक अक्षर (टेक्स्ट फ़ील्ड में) डालने के लिए, एक वर्ण हटाने के लिए, और एक के लिए गुणों को बदलना। आप पहले दो को कार्यान्वित करना चाहते हैं क्योंकि जब वर्ण जोड़े जाते हैं (पहला वाला) या हटाया जाता है (दूसरा वाला)। बदले गए टेक्स्ट को पाने के लिए, आप या तो टेक्स्ट के लिए दस्तावेज़ से पूछ सकते हैं, या अधिक बस myTextField.getText फोन()

C'est टाउट

फिल ट्रॉय

+0

से कोई विचार प्राप्त कर सकते हैं कृपया इसे पहले देखें: [answering] (https: // stackoverflow.com/help/answering) और [कैसे-जवाब दें] (https://stackoverflow.com/help/how-to-answer) –

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