2008-12-30 17 views
8

जेटीक्स्टफिल्ड की एक कुंजी टाइप की गई घटना है लेकिन ऐसा लगता है कि उस समय सेल की सामग्री को आग लग गई है, अभी तक नहीं बदला है।मैं उपयोगकर्ता प्रकार के रूप में JTextField की सामग्री की लंबाई कैसे प्राप्त कर सकता हूं?

उस वजह से। तरंगदैर्ध्य() यहां पढ़ने पर हमेशा गलत होता है।

लंबाई को प्राप्त करने का एक आसान तरीका होना चाहिए क्योंकि यह कुंजी स्ट्रोक के बाद उपयोगकर्ता को दिखाई देता है?

उत्तर

8

यह शायद इष्टतम तरीका नहीं है (और यह एक समय हो गया है), लेकिन अतीत में, मैं (डालने, अद्यतन, निकालने के लिए) JTextField करने और घटनाओं में से किसी पर एक DocumentListener जोड़ लिया है मैं:

evt.getDocument().getLength() 

जो टेक्स्ट फ़ील्ड की सामग्री की कुल लंबाई देता है।

3

यह इस "bug" (or rather "feature")

श्रोताओं उन्हें के प्रसंस्करण से पहले महत्वपूर्ण घटनाओं के बारे में सूचित कर रहे हैं श्रोताओं उन्हें लेने से "चुराने" का घटनाओं अनुमति देने के लिए संबंधित हो सकता है। यह उपभोग करने वाली घटनाओं की पुरानी धारणा के साथ संगतता देता है।
"टाइप किया गया" घटना का मतलब यह नहीं है कि पाठ घटक में दर्ज किया गया था। यह बग नहीं है, यह इरादा व्यवहार है।

सम्भावित समाधान के लिए एक associated Document

// Listen for changes in the text 
myTextField.getDocument().addDocumentListener(new DocumentListener() { 
    public void changedUpdate(DocumentEvent e) { 
    // text was changed 
} 
public void removeUpdate(DocumentEvent e) { 
    // text was deleted 
} 
public void insertUpdate(DocumentEvent e) { 
    // text was inserted 
} 
}); 

नोट इस चाहे कितना पाठ बदल जाती है काम करता है सुनने के लिए है, एक क्लिपबोर्ड कट/पेस्ट के माध्यम से, टेक्स्टफिल्ड पर प्रोगामैटिक "सेटटेक्स्ट()" या यूआई पर फ़ील्ड में टाइप करने वाला उपयोगकर्ता।

3

KeyEvent एस निम्न स्तर की घटनाएं हैं जो यहां उचित नहीं हैं [जो परिचित लगता है]।

JTextField सिस्टम कैसे पता चलता है कि एक वर्ण टाइप किया गया है? एक प्रमुख टाइप की गई घटना (आईआईआरसी, पीएल & एफ के माध्यम से किया गया) के माध्यम से। क्या ईवेंट आपके श्रोता से पहले सिस्टम श्रोता को भेजा जाता है? यह हो सकता है या नहीं कर सकता है।

इस मामले में, आप शायद Document पर जाना चाहते हैं और एक उच्च स्तरीय श्रोता जोड़ें। स्विंग के साथ मॉडल के लिए जल्दी जाना एक अच्छा विचार है - 'जे' कक्षा इंटरफेस असंगत हैं। यदि आप इनपुट डेटा को अवरुद्ध कर रहे हैं, तो आप शायद एक कस्टम मॉडल (या DocumentDocumentFilter के मामले में) चाहते हैं।

2

उपयोग इस कोड:

public void jTextField6KeyReleased(java.awt.event.KeyEvent evt) 
{ 
    System.out.println(jTextField6.getText().length()); 
} 
+0

अपने जवाब के विस्तार प्रश्नकर्ता को समझाने के लिए विचार करें क्यों इस वांछित परिणाम प्राप्त होता है, संभवतः प्रलेखन को जोड़ने। जैसा कि, यह केवल मामूली रूप से उपयोगी है। –

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

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