2013-08-07 9 views
5

मेरे पास मेरे दृश्य में स्क्रॉलपैन है और इसमें नोड्स की एक श्रृंखला जोड़ना चाहेंगे। सटीक राशि गतिशील होना चाहिए। मैं लेबल नोड्स के साथ अवधारणा का परीक्षण कर रहा हूं और स्क्रॉलपैन (वर्तमान में एक वीबीओक्स) की सामग्री के रूप में सफलतापूर्वक कई लेबल जोड़ सकता हूं।जावाएफएक्स - सही स्क्रॉलिंग दिशा के साथ स्क्रॉलपैन में नोड्स जोड़ना

मेरी समस्या यह पता लग रही है कि उपयोगकर्ता को नोड्स से भरे स्क्रॉलपैन के माध्यम से सामान्य रूप से स्क्रॉल करने की अनुमति कैसे दी जाती है। सामग्री स्क्रॉलबार के साथ गति से मेल खाता है; वह है, जब मैं नीचे स्क्रॉल करता हूं, तो सामग्री नीचे जाती है। मैं स्क्रॉल करता हूं, सामग्री स्क्रॉल हो जाती है। तो अगर मेरे पास 10 लेबल हैं, जिनमें से केवल पांच जिनमें से वर्तमान में दिखाई दे रहे हैं, तो अन्य पांच को देखने के लिए सहज कार्रवाई को स्क्रॉल करना होगा। दुर्भाग्यवश, यह सिर्फ पूरी सामग्री को नीचे ले जाता है, खाली स्थान को ऊपर उजागर करता है और अधिक लेबल छुपाता है।

मैं कुछ नमूना कोड पोस्ट कर सकते हैं कि अगर मदद करता है, लेकिन हमले के मेरी योजना का सार यह है: एक के ऊपर (Y अक्ष में)

ScrollPane sp = new ScrollPane(); 
VBox content = new VBox(); 
sp.setContent(content); 
for (int i = 0; i < 10; i++) 
{ 
    Label label = new Label("Label " + i); 
    content.setPrefHeight(content.getPrefHeight() + label.getPrefHeight()); 
    content.getChildren().add(label); 
} 

क्योंकि मैं एक VBox उपयोग करते हैं, लेबल खड़ी दिखती हैं दूसरा, जो मैं चाहता हूं। जैसे-जैसे लेबल जोड़े जाते हैं, स्क्रॉलबार को वीबीओक्स के बढ़ते आकार को प्रतिबिंबित करने की आवश्यकता होती है। मैंने ScrollPane.setVmax() विधि सहित, काम करने के लिए कुछ दृष्टिकोणों की कोशिश की है, जो ठीक है, लेकिन मुझे अभी भी स्क्रॉल दिशा का मुद्दा गलत दिशा में ले जाने की समस्या है। मैंने मूल्यों को संशोधित करने के लिए EventHandler और EventFilter भी कोशिश की है, फिर भी स्क्रॉल की समस्या को हल किए बिना सही दिशा में सामग्री को स्थानांतरित नहीं किया गया है।

उत्तर इतना आसान लगता है, फिर भी यह कोड से घिरा हुआ कई घंटों के बाद भी मुझे बचाना जारी रखता है।

संपादित करें: एक ListView मेरी समस्या हल का उपयोग करने का

jewelsea के सुझाव। हालांकि, मैं उत्सुक रहता हूं कि ScrollPane का उपयोग क्यों करना बहुत अच्छा नहीं था। इसके अतिरिक्त, मैंने ListView कार्यान्वयन के साथ अजीब व्यवहार में भाग लिया है: मैं दृश्य में नया Label मैन्युअल रूप से जोड़ने के लिए एक बटन का उपयोग करता हूं। प्रत्येक अब और फिर, नया Label जोड़ने के बाद दृश्य स्थिर हो जाएगा। यह स्क्रॉल स्थिति को अपडेट करने या नए जोड़े गए Label को प्रदर्शित करने से पहले कुछ सेकंड तक लॉक हो जाता है। मुझे नहीं पता कि ऐसा इसलिए है क्योंकि इस बारे में 20 या तो Label उदाहरण देखे जा रहे हैं या यदि कुछ और अधिक कपटी खेलना है।

+2

इसे लागू करने के लिए 'ListView' का उपयोग न करने का कोई कारण नहीं है? मुझे लगता है कि यह आपके लिए इस तरह के मुद्दों का ख्याल रख सकता है। – jewelsea

+2

@ जेवेलसे, आपने इसे हल किया! मैं हमेशा आश्चर्यचकित हूं कि इनमें से अधिकतर समस्याएं इतनी बड़ी लगती हैं कि उनका समाधान इतना आसान है। मैं 'ListView

उत्तर

0

स्क्रॉलपेन मुद्दों के संबंध में, मुझे पता है कि आप जो करना चाहते हैं वह संभव है क्योंकि मैं कुछ ऐसा ही कर रहा हूं। आपके द्वारा ऊपर दिए गए कोड स्निपेट के आधार पर मैं कुछ चीजों की कोशिश करने का सुझाव दूंगा ...

  • स्क्रॉलपैन को पसंदीदा ऊंचाई और चौड़ाई का पालन करने दें।
  • सामग्री VBox को किसी भी ऊंचाई आकार देने की वरीयता न दें क्योंकि यह इसकी सामग्री के साथ बढ़ेगा। सामग्री जोड़ने के बाद इसकी ऊंचाई को अपडेट करने की आवश्यकता नहीं होनी चाहिए।
  • उपयोग VBox के setAlignment विधि इसकी सामग्री संरेखित करने के लिए या तो TOP_LEFT, TOP_CENTER, या TOP_RIGHT। जब getPrefHeight() विधि का उपयोग कर, क्योंकि यदि आप setPrefHeight() उपयोग नहीं किया है पहले से मेरा मानना ​​है कि यह वापस आ जाएगी -1
  • सतर्क रहें।

उम्मीद है कि यह आपकी मदद करता है!

+0

हालांकि यह उपरोक्त स्निपेट में नहीं है, मैं स्क्रॉलपैन के आयामों को स्पष्ट रूप से (दृश्य बिल्डर और मेरे कोड में) सेट कर रहा था। मैंने सामग्री की ऊंचाई के साथ गड़बड़ करने के बीच भी टॉगल किया, और मेरे पास एक संरेखण निर्दिष्ट था। मैं कुछ और गड़बड़ाने के बाद चीजों को ठीक करने में सक्षम था, लेकिन मैं अभी भी जिस तरह से चाहता था उसे स्क्रॉल नहीं कर सका। –

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