首页 > 解决方案 > 如何仅使用数据库信息在 JFreeChart 中制作图表?

问题描述

这是我到目前为止的代码:

package graphischeOberfläche;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.List;
import java.sql.*;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.BorderFactory;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JTextField;
import javax.swing.JLabel;

@SuppressWarnings("serial")
public class Graphische_Oberfläche extends JFrame {
    private JPanel contentPane;
    DefaultListModel<String> model = new DefaultListModel<String>();
    Map<Integer, ArtikelDurationStatistic> myStat = new HashMap<>();
    JList list = new JList();
    private Connection conn;
   
    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Graphische_Oberfläche frame = new Graphische_Oberfläche();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
   
    /**
     * Create the frame.
     */
    public Graphische_Oberfläche() {
        gui();
    }
   
    public void gui() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 821, 611);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);
   
        JButton verbindenbtn = new JButton("Verbinden");
        verbindenbtn.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                datenabfrage();
                verbinden();
            }
        });
        verbindenbtn.setBounds(44, 10, 96, 21);
        contentPane.add(verbindenbtn);
   
        JScrollPane scrollPane = new JScrollPane();
        scrollPane.setBounds(25, 42, 748, 253);
        contentPane.add(scrollPane);
        scrollPane.setViewportView(list);
    }
   
    private void verbinden() {
        datenabfrage();
    }
   
    private Connection getConnection() {
        String connString = "jdbc:sqlserver://localhost\\sqlexpress;databaseName=FFC";
        String user = "sa";
        String password = "hsvs12";
        try {
            if (conn == null || conn.isClosed()) {
                conn = DriverManager.getConnection(connString, user, password);
                System.out.println("DB connection OK");
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println("ERROR on DB connection");
        }
        return conn;
    }
   
    public void datenabfrage() {
        String query = " SELECT DISTINCT * FROM [FFC].[dbo].[PRODUKTIONAUFTRAGPROTOKOLL] WHERE PRODANLAGEID = 1";
        try {
            myStat.clear();
            conn = getConnection();
            Statement stmt = (Statement) conn.createStatement();
            ResultSet rs = stmt.executeQuery(query);
            while (rs.next()) {
                int artikelNr = rs.getInt("ARTIKELNR");
                String artikelBez = rs.getString("ARTIKELBEZ");
                double sollMenge = rs.getDouble("SOLLMENGE");
                double istMenge = rs.getDouble("ISTMENGE");
                int chargenSoll = rs.getInt("CHARGENSOLL");
                int chargenIst = rs.getInt("CHARGENIST");
                Date startZeit = rs.getDate("STARTZEIT");
                Date endeZeit = rs.getDate("ENDEZEIT");
                int prodAnlageId = rs.getInt("PRODANLAGEID");
                int rezeptVersion = rs.getInt("REZEPTVERSION");
                Date predictedProddDuration = rs.getDate("PREDICTEDPRODDURATION");
   
                if (predictedProddDuration != null) {
                    ArtikelDurationStatistic tmp = null;
                    if (!myStat.containsKey(artikelNr)) {
                        tmp = new ArtikelDurationStatistic();
                        tmp.artikelNr = artikelNr;
                        tmp.artikelBez = artikelBez;
                        myStat.put(artikelNr, tmp);
   
                        String artikel = "" + artikelNr + " - " + artikelBez;
                        model.addElement(artikel);
                    }
                    tmp = myStat.get(artikelNr);
                    Long statistic = (endeZeit.getTime() - startZeit.getTime()) - predictedProddDuration.getTime();
                    tmp.statisticEntries.add(statistic);
                }
            }
            list.setListData(model.toArray());
        } catch (Exception e) {
            // TODO: handle exception
        }
    }
}

标签: javajfreechartwindowbuilder

解决方案


推荐阅读