java - JFreeChart Plot Dynamically when JTable changes -
इस सवाल का पहले से ही एक उत्तर है: < / P>
- 1 उत्तर
मेरे पास JTable है जो प्रदर्शित करता है मेरी जानकारी। इस दो JTable में दो कॉलम (समय के लिए कॉल 1 और सीओ 2 सेंसर के मूल्यों के लिए कॉल 2) शामिल हैं प्रारंभ बटन पर एक क्लिक के साथ, डेटा को उस अवधि के साथ तालिका में जोड़ दिया जाएगा जो मैं कंसोल के माध्यम से दर्ज कर सकता हूं,
Koordianten x = समय, y = CO2 मानों की तालिका में प्रत्येक परिवर्तन के बाद, एक लाइन चार्ट डायनेमिक यह दिखाया जाना चाहिए।
मैं यह रेखाचित्र गतिशील रूप से कैसे प्रदर्शित कर सकता हूँ यह मेरा कोड है:
सार्वजनिक पैनल ग्राफिक () फेंकता है NotConnectedException {initComponents (); } निजी स्थिर JFreeChart createChart (अंतिम XYDataset डाटासेट) {JFreeChart चार्ट = ChartFactory.createXYLineChart ( "KohlendioxdeTest", "समय", "सीओ 2 (पीपीएम)", डाटासेट, PlotOrientation.VERTICAL, झूठे, झूठे, झूठे); वापसी चार्ट; } निजी शून्य प्रदर्शन () {JFreeChart चार्ट = createChart (डेटासेट); चार्ट पैनल पैनल = नया चार्टपैनेल (चार्ट); अंतिम XYPlot प्लॉट = (XYPlot) chart.getPlot (); Panel.setPreferredSize (नया java.awt.Demension (515, 265)); PlGraph.setLayout (नया java.awt.BorderLayout ()); PlGraph.add (पैनल, BorderLayout.CENTER); PlGraph.validate (); } निजी शून्य jButtonStartActionPerformed (java.awt.event.ActionEvent evt) {अंतिम DefaultTableModel मॉडल = (DefaultTableModel) tbCO2Value.getModel (); try {if (!। txtSetPeriode.getText () ट्रिम () isEmpty ()।) {डबल पेरी = Long.parseLong (txtSetPeriode.getText ()); Co2.setCO2CallbackPeriod ((लंबी) पेरी * 1000); co2.addCO2PPMListener (नई BrickletCO2.PPmListener () {@Override सार्वजनिक शून्य PPmconverter (पूर्णांक kohlendioxide) {model.addRow (नई वस्तु [] {DisplayTime.getTime (), String.valueOf (kohlendioxide)});}}); } अन्य {lbComment.setText ("Bitte geben sie die Periode ein"); }} पकड़ (नोटकनेक्टेड एक्ससेप्शन पूर्व) {Logger.getLogger (PanelGraphic.class.getName ())। लॉग (Level.SEVERE, null, ex); } पकड़ (समयबाह्य पूर्व) {Logger.getLogger (PanelGraphic.class.getName ())। लॉग (Level.SEVERE, null, ex); } TbCO2Value.getModel ()। AddTableModelListener (नया MyTableModelListener (tbCO2Value)); डेटासेट = नया XYSeriesCollection (); XYSeries श्रृंखला = नई XYSeries ("सीओ 2 (पीपीएम)"); Int nRow = tbCO2Value.getRowCount (); Int nCol = tbCO2Value.getColumnCount (); वस्तु [] [] तालिकाडेटा = नया ऑब्जेक्ट [एनआरवा] [एनसीओएल]; (इंट आई = 0; आई & lt; nRow; i ++) के लिए {tableData [i] [0] = टीबीओसी 2 वेल्यू.जेट वैल्यूएट (आई, 0); टेबलडेटा [i] [1] = टीबीसीओ 2 वेल्यू.जेट वैल्यूएट (आई, 1); // for (int i = 0; i & lt; 10; i ++) {series.add ((दोहरी) तालिका डेटा [i] [0], (डबल) तालिकाडेटा [i] [1]); } डेटासेट.एडएसरीज (श्रृंखला); प्रदर्शन (); } वर्ग MyTableModelListener लागू करता है TableModelListener {JTable table; निजी MyTableModelListener (JTable तालिका) {this.table = table; } @ ओवरराइड पब्लिक व्हॉइड टेबल परिवर्तित (टेबलमोडेलएवर्त ई) {इंट प्रथमरोव = ई.एफ़स्टस्ट्रा (); Int lastRow = e.getLastRow (); इंट इंडेक्स = ई.गास्ट कॉलम (); स्विच (e.getType ()) {केस टेबलमोडेलइवेंट .INSERT: int nRow = tbCO2Value.getRowCount (); Int nCol = tbCO2Value.getColumnCount (); वस्तु [] [] तालिकाडेटा = नया ऑब्जेक्ट [एनआरवा] [एनसीओएल]; (इंट आई = 0; आई & lt; nRow; i ++) के लिए {tableData [i] [0] = टीबीओसी 2 वेल्यू.जेट वैल्यूएट (आई, 0); टेबलडेटा [i] [1] = टीबीसीओ 2 वेल्यू.जेट वैल्यूएट (आई, 1); } टूटना; }}}}}
बस एक JTable के रूप में सुनता है इसका टेबलमोडेल , एक XYPlot अपनी XYDataset को सुनता है। प्रत्येक मामले में, बस प्रासंगिक मॉडल को अपडेट करें और इसी दृश्य स्वयं प्रतिक्रिया में अपडेट हो जाएगा। अपने डेटा स्रोत को चुने हुए अवधि से निर्धारित दर पर मतदान करने के लिए एक javax.swing.Timer का उपयोग करें। एक संबंधित उदाहरण दिखाया गया है रूपरेखा में, अपने टाइमर के लिए ActionListener इस प्रकार दिखाई देंगे:
@Override सार्वजनिक शून्य actionPerformed (ActionEvent ई) {// डेटा स्रोत model.add पोल (पंक्ति ( ...); dataset.add (...);} आप डेटा स्रोत तक पहुँचने में विलंबता की आशा है, एक, सचित्र और उपयोग करने पर विचार
Comments
Post a Comment