2011-06-01 17 views
5

मैं जानना चाहता हूं कि चार्ट को रीफ्रेश कैसे करें यदि हम डेटा में कुछ "लाइव" बदलना चाहते हैं। मेरा मतलब है उदाहरण के लिए, मेरे पास एक कार्यशाला है जिसमें 3 साल लगते हैं और मैं 5 साल तक 3 साल बदलना चाहता हूं। मैं चार्ट को तुरंत बदलना चाहता हूं।Jfreechart - बदलते डेटा के अनुसार चार्ट को रीफ्रेश करें

क्या कोई अद्यतन चार्ट या ऐसा कुछ है?

मुझे पता है कि आप कह सकते हैं कि "अपनी टास्क श्रृंखलाएं प्राप्त करें, अपने बदलाव करें और इसे स्वचालित रूप से रीफ्रेश किया जाएगा" लेकिन मेरी टास्करीज़ जेनरेट की गई हैं और मैं इन्हें आसानी से नहीं बदल सकता। यही कारण है कि मैं पूरे चार्ट को फिर से इकट्ठा करने और पुनर्निर्माण करने का एक तरीका ढूंढना चाहता हूं।

मुझे आशा है कि मैं पर्याप्त स्पष्ट हूं, समझाना आसान नहीं है।

आपकी मदद के लिए धन्यवाद,

जोहान

उत्तर

0

मैं, "लाइव" एक JFreeChart अद्यतन करने के लिए के बाद से jfreechart का डेटा संरचना अपने डेटा संरचना करने के लिए बहुत असंगत है एक आसान तरीका नहीं मिली है। इसलिए मैं एक रेड्रो() बना देता हूं - मेरे स्वयं का तरीका, जो मेरे डेटा से डेटा एकत्र करता है मॉडल, एक जेएफरी चार्ट डेटा मॉडल बनाएं और चार्ट को नया सेट करें।

यह "लाइव" अपडेट की भावना देता है, यह भी बहुत बदसूरत है।

+1

मैं JFreeChart का दृष्टिकोण बहुत स्विंग के [वियोज्य मॉडल वास्तुकला] के साथ संगत (पाया है http://java.sun.com/products/jfc/tsc/लेख/वास्तुकला /)। – trashgod

6

add()TaskSeries की विधि स्वचालित रूप से सभी पंजीकृत श्रोताओं को SeriesChangeEvent भेजती है, उदा। CategoryPlot। इस example में, DynamicTimeSeriesCollection लागू SeriesChangeEvent। इस मामले में, चार्ट का XYPlot एक पंजीकृत श्रोता है।

+0

क्या 'XYPlot' श्रोता के रूप में पंजीकृत है जो 'CHFFARTEvent' को डिफ़ॉल्ट रूप से' चार्टफैक्टरी 'द्वारा बनाया गया है (यानी, मुझे अपने आप को एक पंजीकृत करने की आवश्यकता नहीं है)? आपके जवाब ने मुझे दो दिनों में दो बार मदद की। धन्यवाद! – coolcfan

+0

अप्रत्यक्ष रूप से: ['सारसरीज डेटासेट '] (http://www.jfree.org/jfreechart/api/javadoc/org/jfree/data/general/AbstractSeriesDataset.html) _forwards_ श्रृंखला साजिश में परिवर्तन, जो (स्वचालित रूप से) सुनता है 'डेटासेट 'बदलता है। – trashgod

4

मुझे यह समस्या थी; मैंने इसका उपयोग किया:

private void refreshChart() { 
    jPanel_GraphicsTop.removeAll(); 
    jPanel_GraphicsTop.revalidate(); // This removes the old chart 
    aChart = createChart(); 
    aChart.removeLegend(); 
    ChartPanel chartPanel = new ChartPanel(aChart); 
    jPanel_GraphicsTop.setLayout(new BorderLayout()); 
    jPanel_GraphicsTop.add(chartPanel); 
    jPanel_GraphicsTop.repaint(); // This method makes the new chart appear 
} 
+0

बहुत बहुत धन्यवाद, आपने समस्या को हल करने में मेरी मदद की –

+0

आपको कोई त्रुटि है, लेकिन यह एक अच्छा समाधान है 1.-रीफ्रेश चार्ट ( 2. -आर्ट प्रारंभिकरण – cmujica

4

मुझे यह समस्या XYPlot के साथ भी थी। मैं डाटासेट रीसेट करके एक समाधान पाया:

chart.getXYPlot().setDataset(chart.getXYPlot().getDataset()); 

पागल है, लेकिन यह काम करता है कि ...

नोट: chart.setNotify(true) कुछ नहीं कर रहा है।

0
// create a chart 
ChartFrame mychartframe = new ChartFrame("my charts", chart); 

// some other stuff ... 

// somewhere else in a code far far away 
mychartframe.getChartPanel().getChart().fireChartChanged(); 
0

मेरे साथ क्या काम किया था निम्नलिखित:

//reset with new dataset 
chart().setDataset(dataset); 
repaint the ChartPanel that contains the JFreeChart 
chartPanel.repaint(); 
संबंधित मुद्दे