如何使用 JFreeChart 将 Variable 从一个 class 插入 class 来绘制这个变量?
How insert Variable from one class into class with JFreeChart to plot this variable?
更新问题[更新]*
:
*
- 在代码中
Termometr shows 0 - screen
为什么我不能将变量 temp
从 DBData.java
插入到 final DefaultValueDataset dataset = new DefaultValueDataset(new Double(temp));
到 Tempo.java [我想把它放在数据集中,我想要图表像 DBData.java ]
中值为 temp
的温度计
我知道 DBData.java in 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
中添加了 try 来检查它是否解析为 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 为我打印:
7.7
7.7
但是温度计无法绘制 - 它接收到 null 或 0 ?
这个例子的解决方案是:
在DBData.java
中,我们有从MySQL = ConnectDB()
中获取数据的方法。
此方法必须 public double ConnectDB()
并且此方法必须 return 变量 temp
:
public double DBConnect(){
...code...
return temp;
}
在 class 中,我有绘制图表的代码,我们需要:
DBData dbData = new DBData();
double temp = dbData.ConnectDB();
然后我们可以将变量 temp 插入数据集
final DefaultValueDataset dataset = new DefaultValueDataset(new Double(temp));
像温度计一样工作JFreeChart
更新问题[更新]*
:
*
- 在代码中
Termometr shows 0 - screen
为什么我不能将变量 temp
从 DBData.java
插入到 final DefaultValueDataset dataset = new DefaultValueDataset(new Double(temp));
到 Tempo.java [我想把它放在数据集中,我想要图表像 DBData.java ]
temp
的温度计
我知道 DBData.java in 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
中添加了 try 来检查它是否解析为 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 为我打印:
7.7 7.7 但是温度计无法绘制 - 它接收到 null 或 0 ?
这个例子的解决方案是:
在DBData.java
中,我们有从MySQL = ConnectDB()
中获取数据的方法。
此方法必须 public double ConnectDB()
并且此方法必须 return 变量 temp
:
public double DBConnect(){
...code...
return temp;
}
在 class 中,我有绘制图表的代码,我们需要:
DBData dbData = new DBData();
double temp = dbData.ConnectDB();
然后我们可以将变量 temp 插入数据集
final DefaultValueDataset dataset = new DefaultValueDataset(new Double(temp));
像温度计一样工作JFreeChart