【问题标题】:How to display multiple items on one graph?如何在一个图表上显示多个项目?
【发布时间】:2015-09-13 15:11:41
【问题描述】:

我使用 Swing GUI 为一家电脑商店(虚构)设计了一个库存/销售信息系统。其中一个功能是显示某些产品在一年内的销售情况的基本条形图。

从名为 dbsales 的 MySQL 数据库调用数据,并使用 jComboBox (cboAnSales) 选择产品类别。
我有一个方法 (public void graph()),它具有生成图形的编码。

项目的数据显示在文本字段中,图表使用该信息进行显示。该方法在每个类别的cboAnSalesif 语句中调用。

现在的问题是它在自己的图表上生成每个项目。例如,电缆类别中有 7 个项目,当我选择它时,它会生成 7 个图表(每个项目一个)。
我需要将所有 7 个项目显示在一个图表上。

我怎样才能做到这一点?

这是 cboAnSales 的电缆部分:

private void cboAnSalesActionPerformed(java.awt.event.ActionEvent evt) {                                           
    if (cboAnSales.getSelectedIndex() == 1)
    { 
        try
        {
            String sql = "select * from dbsales where category ='" + "Cable" + "'";
            Class.forName("com.mysql.jdbc.Driver");
            Connection con = (Connection)
            DriverManager.getConnection("jdbc:mysql://localhost:3306/salventri","root","password");
            Statement stmt=con.createStatement();
            ResultSet rs = stmt.executeQuery(sql); 
            DefaultListModel model = new DefaultListModel();
            while(rs.next())
            {
                String ID = rs.getString("pid");
                txtpid.setText(ID);
                String brand = rs.getString("pbrand");
                txtBrand.setText(brand);
                String name = rs.getString("pname");
                txtName.setText(name);
                String category = rs.getString("category");
                txtCategory.setText(category);
                String unitSold = rs.getString("usold");
                txtUnitsSold.setText(unitSold);
                graph();
            }       
        }
        catch (Exception e)
        {
        }
    }

这是public void graph() 方法中我的图表的编码:

String unitsSold = txtUnitsSold.getText();
String brand = txtBrand.getText();
String name = txtName.getText();
String cat = txtCategory.getText();

DefaultCategoryDataset ddataset = new DefaultCategoryDataset();
ddataset.setValue(new Double(unitsSold), cat, brand + " " + name);

JFreeChart chart = ChartFactory.createBarChart3D("Annual Sales Performance", cat, "Number of Units Sold", ddataset);
chart.getTitle().setPaint(Color.RED);
CategoryPlot p = chart.getCategoryPlot();
p.setRangeGridlinePaint(Color.BLUE);
ChartFrame frame2 = new ChartFrame("Annual Sales", chart);
frame2.setVisible(true);
frame2.setSize(450,350);

【问题讨论】:

  • 没有数据集 addvalue 或 ... addSeries 吗?
  • @D-Klotz 我实际上尝试使用数组来实现这一点并将其作为另一个问题发布,但我得到的答案实际上非常适合我在这里提出的问题并且它有效。我现在刚刚在下面发布了答案。但是感谢您的回复:)

标签: java sql swing netbeans graph


【解决方案1】:

感谢 WillShackleford,我的问题的解决方案在我的public void graph() 中产生了以下代码:

public void graph()
    {
       String year = cboAnnYear.getSelectedItem().toString();
       if(cboAnSales.getSelectedIndex() == 1) 
       {
        try
        {
            //declaring the type of category in the column
            String text = "Cable";
            //Select statement getting the row count
         String sql = "select count(category) from dbsales where category ='" + text + "'";
            Class.forName("com.mysql.jdbc.Driver");
            Connection con = (Connection)
            DriverManager.getConnection("jdbc:mysql://localhost:3306/salventri","root","password");
            PreparedStatement stmt = con.prepareStatement("select * from dbsales where category=?");
            stmt.setString(1, text);
            ResultSet rs = stmt.executeQuery();
            DefaultCategoryDataset ddataset = new DefaultCategoryDataset();
            while (rs.next()) 
            {
                ddataset.setValue(new Double(rs.getDouble("usold")),
            rs.getString("pbrand") + " " + rs.getString("pname"),
            rs.getString("syear"));
            }

             JFreeChart chart = ChartFactory.createBarChart3D("Annual Sales Performance", text, "Number of Units Sold", ddataset);
            chart.getTitle().setPaint(Color.RED);
            CategoryPlot p = chart.getCategoryPlot();
            p.setRangeGridlinePaint(Color.BLUE);
            ChartFrame frame2 = new ChartFrame("Annual Sales", chart);
            frame2.setVisible(true);
            frame2.setSize(900,700);
            }

【讨论】:

    猜你喜欢
    • 2021-10-15
    • 2016-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    相关资源
    最近更新 更多