Я пытаюсь показать диаграмму рассеяния и диаграмму XYline, используя диаграмму jfree. Я могу показывать их по одному. У меня есть поле со списком, которое позволяет вам выбрать тип графика, который вы хотите построить. Исходя из этого, я должен построить соответствующий график, используя jfree chart.

У меня есть следующий код для построения графика рассеяния, и он работает.

 JFreeChart chart = ChartFactory.createScatterPlot("Scatter Plot","Year","Production", dataset);

Теперь я только что добавил оператор if, и у меня есть следующий код, который я теперь использовал для построения графика в соответствии с выбором пользователей через поле со списком. Это не работает. Он просто говорит, что диаграмма переменных не используется, т.е. она не распознает диаграмму переменных вне оператора if.

if(jComboBox6.getSelectedItem().equals("Scatter Plot"))
                        {
                            JFreeChart chart = ChartFactory.createScatterPlot("Scatter Plot","Year","Production", dataset);

                        }
                         if(jComboBox6.getSelectedItem().equals("Line Chart"))
                        {
                            JFreeChart chart = ChartFactory.createScatterPlot("Line Chart","Year","Production", dataset);
                        }

Моя функция отображения сюжета выглядит так.

public void displayProduction() throws SQLException, ClassNotFoundException{

       XYSeriesCollection dataset = new XYSeriesCollection();
         XYSeries series = new XYSeries("Production");
        String JDBC_DRIVER="com.mysql.jdbc.Driver";
    String DB_URL="jdbc:mysql://localhost/data2";
    Connection conn;
    Statement stmt;
        PreparedStatement ps = null;
    String USER = "root";
    String PASS = "";
        Object cropname = CropCombo.getSelectedItem();
       String cropnames = cropname.toString();
       Object locationname = LocationCombo1.getSelectedItem();
       String locationnames = locationname.toString();   
       Object yearfrom = yearfromCombo1.getSelectedItem();
       String yearfromcombo = yearfrom.toString();
       Object yearto = yeartoCombo1.getSelectedItem();
       String yeartocombo = yearto.toString();
       String pd="paddy ";
            System.out.println(cropnames.length()+" "+pd.length());

            System.out.println(cropsList);
         String sql;
         String sql1;
          sql1="Select * from production AS cust INNER JOIN location AS comp ON cust.location_id=comp.location_id INNER JOIN crops AS crop ON cust.crop_id=crop.crop_id WHERE comp.name=? AND crop.name=? AND year_of_production BETWEEN "+yearfrom + " AND " + yearto;
        try{
            Class.forName(JDBC_DRIVER);
            conn=DriverManager.getConnection(DB_URL,USER,PASS);
            System.out.println("Creating statement...");
            //stmt = conn.createStatement(); 
                        ps = conn.prepareStatement(sql1);
                        ps.setString(1, locationnames);
                         ps.setString(2, cropnames);

                       System.out.println(sql1);    
                       ResultSet rs = ps.executeQuery();
                        // ResultSet rs=stmt.executeQuery(sql);                      
                        while (rs.next()){

                            String yeartext = rs.getString("year_of_production");

                            String productiontext = rs.getString("production_amount");

                            double production = Double.parseDouble(productiontext);
                            double years = Double.parseDouble(yeartext);
                            series.add(years,production) ;

                            //dataset.addSeries(series);              
             }
                        dataset.addSeries(series);

                        graph1.removeAll();
                        if(jComboBox6.getSelectedItem().equals("Scatter Plot"))
                        {
                            JFreeChart chart = ChartFactory.createScatterPlot("Scatter Plot","Year","Production", dataset);

                        }
                         if(jComboBox6.getSelectedItem().equals("Line Chart"))
                        {
                            JFreeChart chart = ChartFactory.createScatterPlot("Line Chart","Year","Production", dataset);
                        }

                        ChartPanel chartPanel = new ChartPanel(chart, false);
                        graph1.setLayout(new BorderLayout());
                        graph1.add(chartPanel, BorderLayout.EAST);
                        graph1.add(chartPanel);
                        SwingUtilities.updateComponentTreeUI(this);
//                        p.setRangeGridlinePaint(blue);
                        graph1.updateUI();
                        System.out.println("Database created successfully...");

                }
           catch(SQLException se)
                {
                    //Handle errors for JDBC
                    System.out.println("Connect failed ! ");
                    se.printStackTrace();
//                    JOptionPane.showMessageDialog(MajorUI.this, err.getMessage());
                    }

    }
0
enjal 16 Авг 2014 в 12:45

1 ответ

Лучший ответ

Локальные переменные (включая формальные параметры) видны только в методе, конструкторе или блоке, в котором они объявлены.

Все локальные переменные фактически являются приватными для блока, в котором они объявлены. Никакая часть программы за пределами блока их не видит.

У вас есть этот код:

if(jComboBox6.getSelectedItem().equals("Scatter Plot"))
   {
   JFreeChart chart = ChartFactory.createScatterPlot("Scatter Plot","Year","Production", dataset);
   }
if(jComboBox6.getSelectedItem().equals("Line Chart"))
   {
   JFreeChart chart = ChartFactory.createScatterPlot("Line Chart","Year","Production", dataset);
   }
ChartPanel chartPanel = new ChartPanel(chart, false);

Вы объявляете chart внутри области действия блока if, а затем пытаетесь использовать его позже, когда он выходит за пределы области действия после блока if.

Попробуйте следующий код:

JFreeChart chart;
if(jComboBox6.getSelectedItem().equals("Scatter Plot"))
   {
   chart = ChartFactory.createScatterPlot("Scatter Plot","Year","Production", dataset);
   }
if(jComboBox6.getSelectedItem().equals("Line Chart"))
   {
   chart = ChartFactory.createScatterPlot("Line Chart","Year","Production", dataset);
   }
ChartPanel chartPanel = new ChartPanel(chart, false);

Подробнее см. Local / Instance / Class Variables. Информация

1
DavidPostill 16 Авг 2014 в 14:09