Search code examples
javajfreechart

How insert Variable from one class into class with JFreeChart to plot this variable?


Update question[Update]*: * - in the code Termometr shows 0 - screen

Why I can't insert variable temp from DBData.java in to final DefaultValueDataset dataset = new DefaultValueDataset(new Double(temp)); in Tempo.java [ I want to place it in the dataset, I want plot chart like termometr with value of temp from DBData.java ]

I know that in DBData.java in void ConnectDB() TemperaturaPow is String so I parse it to double. I tried parse temp to integer but without result.

In Tempo.java I can use System.out.println(dbData.temp) and IDEA shows me for example 9.0 but JFreeChart Termometr is showing value "0" zero

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();
    }

}

[Update]*

I added try in DBData.java to check does it parse to double.

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);
                }

Intellji prints for me :

7.7 7.7 But thermometr can't draw - it receive null or 0 ?


Solution

  • Solution for this example is :

    In DBData.java, we have method which take data from MySQL = ConnectDB(). This method must be public double ConnectDB() and this method must return variable temp:

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

    In class where I have code to draw chart we need to :

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

    and then we can insert variable temp into dataset

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

    Working JFreeChart like thermometer screen of working chart