2012-09-27 11 views
5

मैं अपने जावाएफएक्स लाइनकार्ट को स्टाइल करने की कोशिश कर रहा हूं लेकिन मुझे किंवदंती के साथ कुछ परेशानी है।जावाएफएक्स 2.0 - गतिशील रूप से लाइन चार्ट के किंवदंती रंग को कैसे बदलें?

मुझे पता है कि सीएसएस फ़ाइल में एक लाइन चार्ट की कथा रंग बदलने के लिए:

.default-color0.chart-series-line { -fx-stroke: #FF0000, white; }
.default-color1.chart-series-line { -fx-stroke: #00FF00, white; }
.default-color2.chart-series-line { -fx-stroke: #0000FF, white; }

.default-color0.chart-line-symbol { -fx-background-color: #FF0000, white; }
.default-color1.chart-line-symbol { -fx-background-color: #00FF00, white; }
.default-color2.chart-line-symbol { -fx-background-color: #0000FF, white; }

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

चार्ट लाइनों मैं शैली बदलने के द्वारा प्रबंधित किया के बाद मैं बटन क्लिक किया के लिए:

..
dataList.add(series);
..
series.getNode().setStyle("-fx-stroke: rgba(" + rgba + ")");

अगर मैं बटन का चयन रद्द मैं सूची से डेटा को हटा दें।

dataList.remove(series);

कि स्ट्रोक के लिए ठीक काम कर रहा है, लेकिन मैं कैसे किंवदंती के लिए एक ही कर सकते हैं?

आप नीचे एक उदाहरण देख सकते हैं। सबसे पहले मैंने लाल बटन पर क्लिक किया, इस प्रकार स्ट्रोक और किंवदंती लाल (डिफ़ॉल्ट-रंग 0) है। उसके बाद मैंने नीले बटन पर क्लिक किया। यहां आप समस्या देख सकते हैं। स्ट्रोक नीला है लेकिन किंवदंती हरा है, क्योंकि डिफ़ॉल्ट रंग 1 का उपयोग किया जाता है और मुझे नहीं पता कि पौराणिक रंग को कैसे बदला जाए।

enter image description here

+0

क्या आपका मतलब उपशीर्षक या लेबल है? – ceklock

उत्तर

0

ऐसा लगता है कि this पुरुष अपने वर्ग का उपयोग कर, और फिर उन नोड्स पर setStyle() कॉल कथा के लिए इस्तेमाल किया नोड्स देखने के लिए सक्षम है। (मुझे नहीं लगता कि उसकी समस्या आपके लिए प्रासंगिक है)

2

मैं इस मुद्दे में भी भाग गया। मुद्दा यह प्रतीत होता है कि जब चार्ट श्रृंखला में चार्ट श्रृंखला जोड़ दी जाती है, तो किंवदंती एक ही समय में अपडेट नहीं होती है, इसलिए जब आप उस श्रृंखला के स्टाइल क्लास के साथ घटकों को देखते हैं तो वे अभी तक मौजूद नहीं हैं। एक कार्य-आसपास के साथ आया जो पता चलता है कि किंवदंती वस्तुओं को कब बनाया जाता है ताकि गतिशील स्टाइल उन्हें जोड़ा जा सके।

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

for (Node n : lineChart.getChildrenUnmodifiable()) 
    { 
     if (n instanceof Legend) 
     { 
      final Legend legend = (Legend) n; 

      // remove the legend 
      legend.getChildrenUnmodifiable().addListener(new ListChangeListener<Object>() 
      { 
       @Override 
       public void onChanged(Change<?> arg0) 
       { 
        for (Node node : legend.getChildrenUnmodifiable()) 
        { 
         if (node instanceof Label) 
         { 
          final Label label = (Label) node; 
          label.getChildrenUnmodifiable().addListener(new ListChangeListener<Object>() 
          { 
           @Override 
           public void onChanged(Change<?> arg0) 
           { 
            //make style changes here 
           } 

          }); 
         } 
        } 
       } 
      }); 
     } 
    } 
+1

इसके लिए एक हजार धन्यवाद, मैं कुछ दिनों के लिए ऐसा कुछ ढूंढ रहा था। – MaxD

+0

शायद एक बेवकूफ सवाल है लेकिन मैं शैली में क्या बदलाव करूंगा? लेबल करना? @MaxD –

1

भविष्य में संदर्भ के लिए, इस समस्या Platform.runLater() के लिए एक कॉल में अपने प्रासंगिक कोड लपेटकर द्वारा हल किया जा सकता है। उदाहरण के लिए:

LineChart<Number, Number> plot; 
.... 
Platform.runLater(() -> { 
    Node nl = plot.lookup(".default-color0.chart-series-line"); 
    Node ns = plot.lookup(".default-color0.chart-line-symbol"); 

    nl.setStyle("-fx-stroke: #333;"); 
    ns.setStyle("-fx-background-color: #333, white;"); 
}); 
+0

बहुत बहुत धन्यवाद! JavaFX के लिए इन सभी गुप्त सीएसएस कहां मिल सकता है? –

+1

@ Zeta.Investigator यह मैं संदर्भ के रूप में उपयोग करता हूं https://gist.github.com/tmazeika/c90c03c645d18722ddb0 – Chris

+0

यह प्लॉट क्या है .lookup? –

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