2010-10-06 6 views
5

पर गोलीबारी नहीं कर रही है, इसने कुछ अलग दृष्टिकोणों की कोशिश की है लेकिन अब तक कोई सफलता नहीं है। बस मुझे आश्चर्य हुआ कि क्या मुझे कुछ याद आ रहा है। मेरे पास एक जेएसपीनर है जो कैलेंडर के साथ डेटसेलेक्टर विजेट का एक घटक है। यदि कैलेंडर कैलेंडर या जेएसपीनर ऊपर और नीचे तीरों का उपयोग करने के बजाय उपयोगकर्ता जेएसपीनर में कोई टेक्स्ट बदलता है तो मैं एक सत्यापन विधि को आग लगाने की कोशिश कर रहा हूं। वहाँ बाहरजावा कुंजीलिस्ट जेएसपीनर

jSpinner1.addKeyListener(kl); 

jSpinner1.getEditor().addKeyListener(kl); 

((JSpinner.DefaultEditor) jSpinner1.getEditor().getTextField().addKeyListener(kl); 

किसी को भी मैं गलत क्या कर रहा है के रूप में किसी भी विचार हो गया है:

यहाँ विभिन्न दृष्टिकोणों मैं कोशिश की है कर रहे हैं? धन्यवाद

अद्यतन क्षमा याचना, मैंने कहा जाना चाहिए था कि मैं पहले से ही JSpinnerDateModel जो JSpinner से जुड़ा हुआ है के लिए एक ChangeListener जोड़ लिया है। इसलिए जैसा:

ChangeListener changeListener = new ChangeListener() { 
     @Override 
     public void stateChanged(ChangeEvent e) { 
      dateChanged(); 
     } 
    }; 

    jSpinnerDateModel.addChangeListener(changeListener); 

    KeyListener keyListener = new KeyListener() { 

     @Override 
     public void keyTyped(KeyEvent e) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void keyPressed(KeyEvent e) { 
      System.out.println(e.getKeyChar()); 
      dateChanged(); 
     } 

     @Override 
     public void keyReleased(KeyEvent e) { 
      // TODO Auto-generated method stub 

     } 

    }; 
    ((JSpinner.DefaultEditor) jSpinner1.getEditor()).getTextField().addKeyListener(
      keyListener); 

धन्यवाद

फ्रैंक

उत्तर

2

जेएसपीनर स्वयं को स्वयं को संभालते हैं, लेकिन वे बाहरी दुनिया में चेंजएवेंट को आग लगाते हैं। एक चेंजलिस्टर जोड़ने से आपको अपनी इच्छित सत्यापन करने की अनुमति मिलनी चाहिए।

यह भी देखें: Detecting Spinner Value Changes (Java Tutorials)

+0

मूल जानकारी में इस जानकारी को शामिल करने के लिए क्षमा नहीं (मैंने इसे अभी अपडेट किया है) लेकिन मेरे पास पहले से ही जेएसपीनर के मॉडल से जुड़ा एक चेंजलिस्ट है। यह जेएसपीनर में मूल्य में किए गए किसी भी बदलाव को पकड़ता है, लेकिन केवल तभी उपयोगकर्ता जेएसपीनर नियंत्रण का उपयोग करता है। मैं कुंजीलिस्ट के कुंजी दबाए गए ईवेंट को आग लगाने की कोशिश कर रहा हूं, जब उपयोगकर्ता मैन्युअल रूप से कीबोर्ड के माध्यम से जेएसपीनर के मान को संपादित करता है। धन्यवाद – Frank

+0

@ फ्रैंक: जब भी उपयोगकर्ता मूल्य बदलता है * और चेंज दूर * (या एंटर दबाता है) एक चेंजलिस्टर को आग लगनी चाहिए। आप सही हैं कि उपयोगकर्ता टाइपिंग करते समय यह आग नहीं लगेगा। –

+0

हाँ यह समस्या है जो मैं कर रहा हूं। यह एक विज़ार्ड पैनल का हिस्सा है और यदि उपयोगकर्ता बस एक तिथि और क्लिक का चयन करता है तो फोकस खो नहीं जाता है और सत्यापन विधि बहुत देर हो जाती है। वैसे भी आपके इनपुट के लिए धन्यवाद। पहले विचार से ट्रिकियर लगता है। – Frank

11

आप निष्क्रिय करने के लिए कुंजीपटल संपादन ऐसा करने चाहते हैं:

JFormattedTextField tf = ((JSpinner.DefaultEditor)spinner.getEditor()).getTextField(); 
tf.setEditable(false); 

महत्वपूर्ण घटनाओं आप के लिए एक श्रोता जोड़ने की जरूरत के लिए सुनने के लिए पाठ का क्षेत्र। यह मेरे लिए काम करता है:

((JSpinner.DefaultEditor)spinner.getEditor()).getTextField().addKeyListener(new KeyListener(){ 

      @Override 
      public void keyPressed(KeyEvent e) {      
      } 

      @Override 
      public void keyReleased(KeyEvent e) { 
       System.out.println("PRESSED!");      
      } 

      @Override 
      public void keyTyped(KeyEvent e) {      
      } 

     }); 
+0

हाँ इसके लिए धन्यवाद। मेरे पास यह आखिरी विकल्प है क्योंकि मुझे करना है, लेकिन मैं चाहता हूं कि उपयोगकर्ता को नियंत्रण का उपयोग करके या कीबोर्ड के माध्यम से मैन्युअल रूप से तिथि संपादित करने के लिए पूर्ण पहुंच हो। – Frank

+0

धन्यवाद लेकिन मेरे पास पहले से ही यह कोड था - मैंने उपयोग में सभी कोड दिखाने के लिए प्रश्न अपडेट किया है। उसके लिए माफ़ करना। – Frank

2

यह स्विंग की कमी है, और मेरी राय में JSpinner अंतर्निहित पाठ क्षेत्र के लिए निम्न पहुँच की आपूर्ति में JComboBox पालन करना चाहिए: स्रोत के माध्यम से जा से

JComboBox.getEditor().getEditorComponent() 

J1.7 की मैं तुम्हें

JSpinner.getEditor().getComponent(0) 

साथ काफी एक ही बात प्राप्त कर सकते हैं पाया इसलिए आप foll में श्रोता "हैक" कर सकते हैं कारण रास्ता:

JSpinner.getEditor().getComponent(0).addKeyListener(...) 

जाहिर है इस पर निर्भर करता है स्विंग के कार्यान्वयन 'के कवर के तहत' और J1.7 पर रूप में काम करता है, लेकिन कोई गारंटी नहीं है यह अन्य संस्करणों भविष्य या अतीत के लिए काम करता है।

आनंद लें।

संपादित

या यदि संपादक DefaultEditor का एक उदाहरण है, तो आप इसे इस तरह के और उपयोग 'getTextField()' के रूप में कास्ट कर सकते हैं। यह आसान होगा अगर यह इंटरफ़ेस में परिभाषित किया गया था।

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