2015-04-28 7 views
6

मैंने जावाफ़ैक्स स्पिनरों के साथ एक अजीब समस्या (मुझे, वैसे भी) में भाग लिया है और इसमें किसी भी प्रकार के श्रोता को संलग्न करने में सक्षम नहीं है।आप जावाफ़ैक्स स्पिनर में श्रोता को कैसे संलग्न करते हैं?

मैं प्रोग्रामिंग स्विंग करने के लिए, जहां मैं एक JSpinner करने के लिए एक ChangeListener देते हैं और इस तरह की घटनाओं प्राप्त कर सकते हैं इस्तेमाल किया हूँ, लेकिन JavaFX ऐसा कुछ है करने के लिए प्रतीत नहीं होता।

प्रश्न में कोड ...

IntegerSpinnerValueFactory spinnerValueFactory = new SpinnerValueFactory.IntegerSpinnerValueFactory(0, Integer.MAX_VALUE); 

    hullPointsSpinner = new Spinner<Integer>(spinnerValueFactory); 
    hullPointsSpinner.setEditable(true); 

    ((TextField)hullPointsSpinner.getEditor()).setOnAction(new EventHandler<ActionEvent>() { 

     public void handle(ActionEvent event) 
     { 
     System.out.println("Howdy, folks! Value is " + hullPointsSpinner.getValue() + "!!"); 
     } 
    }); 

तीर बटन बढ़ाने के लिए और क्षेत्र में मूल्य में कमी होगी, लेकिन मॉडल में मूल्य पर कोई प्रभाव नहीं। केवल फ़ील्ड की सामग्री का चयन करना और एंटर दबाकर वास्तव में मॉडल में डेटा अपडेट करना होगा और मूल्य प्रिंट करना होगा। (दबाने वाली प्रविष्टि प्रलेख दस्तावेज में है, मुझे पता है।)

मुझे यह भी एहसास है कि मैं उस इवेंट हैंडलर को स्पिनर के टेक्स्टफिल्ड पर getEditor के साथ डाल रहा हूं, लेकिन मुझे अभी तक ऐसा करने का कोई और तरीका नहीं दिख रहा है।

क्या श्रोता के बटन पर श्रोता को हुक करने का कोई तरीका है?
(हेक, क्या श्रोताओं को संलग्न करने के लिए उन बटनों पर पहुंचने का कोई तरीका है?)

क्या मुझे स्पिनर/संपादक से गलत प्रकार की घटना मिल रही है? क्या मैं स्पिनरवेल्यू फैक्ट्री पर किसी प्रकार का श्रोता डाल सकता हूं?
क्या कोई स्पष्ट समाधान है जिसे मैं यहां देख रहा हूं?

मैं यदि आवश्यक हो तो एक JSpinner के साथ इस से बदल देंगे, लेकिन यह सिर्फ मेरे लिए पागल है जिसका इस API एक स्पिनर घटक और इस तरह के एक अजीब तरह से इसका इस्तेमाल करने के लिए होता है।

अग्रिम धन्यवाद।

उत्तर

11

निम्नलिखित मेरे लिए अच्छा काम करने लगता है:

hullPointsSpinner.valueProperty().addListener((obs, oldValue, newValue) -> 
    System.out.println("New value: "+newValue)); 

वैकल्पिक रूप से आप उपर दिए गए श्रोता साथ

spinnerValueFactory.valueProperty().addListener(...); 

कर सकते हैं।

आपको this bug नोट करना चाहिए, जो 1.8.0u60 में तय किया गया है।

+0

धन्यवाद !!!!!! मैं इसके साथ दो दिनों से लड़ रहा हूं! अभी भी जावाएफएक्स पर काफी नहीं है, लेकिन मैं वहां जा रहा हूं। – BozemanPhil

+0

वाईडब्ल्यू। बस एफवाईआई, यह मूल रूप से सभी जावाएफएक्स नियंत्रणों का तरीका है जो एक मूल्य संग्रहीत करते हैं (शायद 'बटन' को छोड़कर सब कुछ) काम करते हैं। 'CheckBox.selectedProperty()। AddListener (...)', 'textField.textProperty()। AddListener (...)', 'comboBox.valueProperty()। AddListener (...)', आदि –

+0

धन्यवाद उत्तर के लिए बहुत कुछ। – 7twenty7

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