Ho ottenuto un grafico del genere:
Solo che vorrei nell'asse delle ordinate che il tempo fosse scandito con un intevallo di 2 ore partendo da 0:00.....in modo che il grafico abbia un filo logico ben preciso.....codice:import java.awt.Dimension; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import javax.swing.JDesktopPane; import javax.swing.JInternalFrame; import java.text.DateFormat; import java.text.SimpleDateFormat; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.data.time.Hour; import org.jfree.data.time.Day; import org.jfree.data.time.RegularTimePeriod; import org.jfree.data.time.TimeSeries; import org.jfree.data.time.TimeSeriesCollection; import org.jfree.data.xy.XYDataset; import org.jfree.ui.ApplicationFrame; import org.jfree.ui.RefineryUtilities; public class InternalFrameDemo extends ApplicationFrame { public InternalFrameDemo(final String title) { super(title); final JDesktopPane desktopPane = new JDesktopPane(); desktopPane.setPreferredSize(new Dimension(800, 600)); final JInternalFrame frame = createFrame(); desktopPane.add(frame); frame.pack(); frame.setLocation(0, 0); frame.setVisible(true); getContentPane().add(desktopPane); } private JInternalFrame createFrame() { final XYDataset dataset1 = createDataset("Series 1",new Day()); final JFreeChart chart = ChartFactory.createTimeSeriesChart("Titolo Trend","Tempo","Temperatura",dataset1,true,true,false); final ChartPanel chartPanel = new ChartPanel(chart); chartPanel.setPreferredSize(new Dimension(800, 600)); final JInternalFrame frame = new JInternalFrame("Prove Trend", true); frame.getContentPane().add(chartPanel); return frame; } private XYDataset createDataset(final String name,final RegularTimePeriod start) { final TimeSeries series = new TimeSeries(name, start.getClass()); Connection con = null; RegularTimePeriod period = start; try { String driver = "net.sourceforge.jtds.jdbc.Driver"; Class.forName(driver).newInstance(); } catch (Exception e) { System.out.println("Fallito il caricamento dei driver SQL."); return (null); } try { // Query SQL String SQL= "SELECT * FROM Cella30Trend "; // Connessione col database in cui vengono specificati url, nome utente, password con = DriverManager.getConnection("jdbc:jtds:sqlserver://localhost:1433/DbFrigo", "**", "**"); Statement select = con.createStatement(); //caricamento query SQL ResultSet result = select.executeQuery(SQL); while (result.next()) { String tempo = result.getString(2); double temp_a = result.getDouble(3); DateFormat dateformat=new SimpleDateFormat("yyyy/MM/dd HH.mm.ss"); java.util.Date data=dateformat.parse(tempo); series.addOrUpdate(new Day(data),temp_a); } } catch (Exception e) { e.printStackTrace(); } finally { if (con != null) { try { con.close(); } catch (Exception e) { e.printStackTrace(); } } } final TimeSeriesCollection dataset = new TimeSeriesCollection(); dataset.addSeries(series); return dataset; } public static void main(final String[] args) { final InternalFrameDemo demo = new InternalFrameDemo("Trend 1"); demo.pack(); RefineryUtilities.centerFrameOnScreen(demo); demo.setVisible(true); } }
Inoltre vorrei che questo trend mi si aprisse in un frame e non come fa adesso....
e poi vorrei generare più righe nello stesso trend con stessa data, ma con valori diversi perchè sono riferiti a rilevamenti diversi: esempio (temp_i e temp_u)
E se possibile a destra nel trend vorrei una parcentuale da 0 a 100%....per capire l'andamento del grafico...
Mi potete dare una mano???
GRAZIE


Rispondi quotando