将 MySQL 数据库中的数据放入 JPanel 的 JFree Chart
JFree Chart with data from MySQL Database into a JPanel
我正在尝试在我的程序中实现 JFree Chart,我目前正在开发 Java Swing 应用程序。我想将图表显示到应用程序内的面板中。因此,我要为图表提取数据的 table 如下所示:
-----------------------
| daily_total_statements|
-----------------------
| Reference ID (PK) |
| Value |
| Date |
-----------------------
我用来实现图表的代码是:
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);
}
我认为可以工作的数据集代码,但我对此有点困惑:
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;
}
如您所见,我正在为数据库使用单例 class。问题是图表根本没有显示,它只是一个空面板。如果你能帮忙,请!
对于错误的格式和语言,我们深表歉意!
因为一个ChartPanel
是一个 JPanel
,你可以简单地将它添加到你的框架中,如下所示。框架的默认布局是 BorderLayout
,默认约束是 CENTER
。而且,
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;
}
}
我正在尝试在我的程序中实现 JFree Chart,我目前正在开发 Java Swing 应用程序。我想将图表显示到应用程序内的面板中。因此,我要为图表提取数据的 table 如下所示:
----------------------- | daily_total_statements| ----------------------- | Reference ID (PK) | | Value | | Date | -----------------------
我用来实现图表的代码是:
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);
}
我认为可以工作的数据集代码,但我对此有点困惑:
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;
}
如您所见,我正在为数据库使用单例 class。问题是图表根本没有显示,它只是一个空面板。如果你能帮忙,请! 对于错误的格式和语言,我们深表歉意!
因为一个ChartPanel
是一个 JPanel
,你可以简单地将它添加到你的框架中,如下所示。框架的默认布局是 BorderLayout
,默认约束是 CENTER
。而且,
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;
}
}