Я пытаюсь показать диаграмму рассеяния и диаграмму 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());
}
}
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. Информация
Похожие вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.