Estoy tratando de implementar un JFree Chart en mi programa, actualmente estoy desarrollando una aplicación Java Swing. Quiero mostrar el gráfico en un panel dentro de la aplicación. Entonces, la tabla de la que quiero extraer los datos para el gráfico es la siguiente:
----------------------- | estados_totales_diarios| ----------------------- | ID de referencia (PK) | | Valor | | Fecha | -----------------------
y el código que he usado para implementar el gráfico es:
public void buidGraph(JPanel jp) { DefaultCategoryDataset dataset = createDataset(); JFreeChart chart = ChartFactory.createLineChart( "Daily Progress", "Date", // X-Axis Label "Number of Members", // Y-Axis Label dataset ); ChartPanel panel = new ChartPanel(chart); jp.add(panel); }
El código del conjunto de datos que pensé que funcionaría y que estoy un poco confundido por él:
private DefaultCategoryDataset createDataset() { DefaultCategoryDataset dataset = new DefaultCategoryDataset(); try { String query = "SELECT `Value`, `Date` FROM `daily_total_statements` ORDER BY `Date` ASC"; Connection c = MySQL_Database.getInstance().getConnection(); PreparedStatement ps = c.prepareStatement(query); ResultSet rs = ps.executeQuery(); String series2 = "Daily progress"; while (rs.next()) { dataset.addValue(rs.getInt(1), series2, rs.getString(2)); } } catch (SQLException e) { JOptionPane.showMessageDialog(null, "Problem creating chart! " + e.getMessage()); } return dataset; }
Estoy usando una clase singleton para la base de datos como puede ver. El problema es que el gráfico no se muestra en absoluto, es solo un panel vacío. ¡Por favor, si pudieras ayudar! ¡Perdón por el mal formato y lenguaje!
Debido a que un ChartPanel
es un JPanel
, simplemente puede agregarlo a su marco, como se muestra a continuación. El diseño predeterminado del marco es BorderLayout
y la restricción predeterminada es CENTER
. Además,
JDBCXYDataset
, ilustrado aquí import java.awt.Dimension; import java.awt.EventQueue; import javax.swing.JFrame; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.chart.plot.PlotOrientation; import org.jfree.data.category.DefaultCategoryDataset; public class GraphTest extends JFrame { public GraphTest() { initComponents(); } private void initComponents() { add(buildLineGraph()); pack(); setDefaultCloseOperation(EXIT_ON_CLOSE); setLocationRelativeTo(null); setVisible(true); } public static void main(String args[]) { EventQueue.invokeLater(GraphTest::new); } public ChartPanel buildLineGraph() { DefaultCategoryDataset dataset = createLineGraphDataset(); JFreeChart chart = ChartFactory.createLineChart("Daily Progress", "Day", "Value", dataset, PlotOrientation.VERTICAL, true, true, false); return new ChartPanel(chart) { @Override public Dimension getPreferredSize() { return new Dimension(640, 480); } }; } private DefaultCategoryDataset createLineGraphDataset() { // TODO: use JDBCXYDataset DefaultCategoryDataset dataset = new DefaultCategoryDataset(); dataset.addValue(1, "Result", "Mon"); dataset.addValue(5, "Result", "Tue"); dataset.addValue(7, "Result", "Wed"); return dataset; } }