Как вставить переменную из одного класса в класс с JFreeChart, чтобы построить эту переменную?

Обновить вопрос[Update]*: * - в коде Термометр показывает 0 - скрин

Почему я не могу вставить переменную temp из DBData.java в final DefaultValueDataset dataset = new DefaultValueDataset(new Double(temp)); в Tempo.java [я хочу поместить ее в набор данных, я хочу построить диаграмму типа термометра со значением temp из DBData.java]

Я знаю, что в DBData.java в void ConnectDB() TemperaturaPow есть строка, поэтому я анализирую ее как двойную. Я попытался разобрать temp на целое число, но безрезультатно.

В Tempo.java я могу использовать System.out.println(dbData.temp), и IDEA показывает мне, например, 9.0, но JFreeChart Termometr показывает значение "0" ноль

Tempo.java

public class Tempo extends ApplicationFrame {

public Tempo(final String title){

    super(title);

    DBData dbData = new DBData();
    final double temp = dbData.temp;

    final DefaultValueDataset dataset = new DefaultValueDataset(new Double(temp)); <<<-------

    final ThermometerPlot plot = new ThermometerPlot(dataset);
    final JFreeChart chart = new JFreeChart("Termometr",JFreeChart.DEFAULT_TITLE_FONT,plot,false);

    plot.setThermometerStroke(new BasicStroke(2.0f));
    plot.setThermometerPaint(Color.lightGray);

    final ChartPanel chartPanel = new ChartPanel(chart);
    setContentPane(chartPanel);
}
public static void main(String[] args){
    DBData dbData = new DBData();
    dbData.ConnectDB();
    final Tempo demo = new Tempo("Thermometr demo");
    demo.pack();
    demo.setVisible(true);
   System.out.println(dbData.temp);

}

}

DBData.java

public class DBData {

    public double temp;
    private Connection con;
    private Statement st;
    private ResultSet rs;

    void ConnectDB(){

        try {
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:mysql://XXX
                    "passs");
            st = con.createStatement();
            System.out.println("Połączono z BD");

            String query = "SELECT * FROM X ORDER BY id DESC LIMIT 1";
            rs = st.executeQuery(query);
            System.out.println("Records from MySQL");

            while (rs.next()) {
                String TemperaturaPow = rs.getString("TemperaturaPow");
                System.out.println(TemperaturaPow);
                temp = Double.parseDouble(TemperaturaPow); <<<----------
                System.out.println(temp);


            }
        } catch (Exception ex) {
            System.out.println("Error: " + ex);
        }
    }

    void initialize(){
        ConnectDB();
    }

}

[Обновлять]*

Я добавил попытку в DBData.java, чтобы проверить, удваивается ли он.

while (rs.next()) {
                String TemperaturaPow = rs.getString("TemperaturaPow");
                System.out.println(TemperaturaPow);
                temp = Double.parseDouble(TemperaturaPow); <<<----------
                System.out.println(temp);
                try{
                    temp = Integer.parseInt(TemperaturaPow);
                }catch (NumberFormatException e){
                    System.out.println("Error parse: " + e);
                }
Intellji prints for me :

Error parse: java.lang.NumberFormatException: For input string: "7.7"
0.0
0.0
If I use :

try{
                    temp = Double.parseDouble(TemperaturaPow);
                }catch (NumberFormatException e){
                    System.out.println("Error parse: " + e);
                }

Intelji печатает для меня:

7.7 7.7 Но термометр не может рисовать - он получает ноль или 0 ?


person TomaszBag    schedule 23.02.2017    source источник
comment
Возможный дубликат Изменение цвета ртути в термометре в JFreeChart.   -  person trashgod    schedule 24.02.2017
comment
ссылка это похожая тема, но я ее не понимаю:/ вопрос в том, почему DefaultValueDataset dataset в Tempo.java не может взять переменную temp из другого класса и нарисовать график/показать температуру в термометре - термометр показывает 0 :)   -  person TomaszBag    schedule 25.02.2017


Ответы (1)


Решение для этого примера:

В DBData.java у нас есть метод, который берет данные из MySQL = ConnectDB(). Этот метод должен быть public double ConnectDB(), и этот метод должен возвращать переменную temp:

public double DBConnect(){
...code...
return temp;
}

В классе, где у меня есть код для рисования диаграммы, нам нужно:

DBData dbData = new DBData();
double temp = dbData.ConnectDB();

а затем мы можем вставить переменную temp в набор данных

   final DefaultValueDataset dataset = new DefaultValueDataset(new Double(temp));

Рабочий JFreeChart как термометр экран рабочего графика

person TomaszBag    schedule 25.02.2017