JavaFX场景生成器在启动程序时显示变量
您好,我尝试在JavaFX中的start方法上从MySQL获取数据 现在在Intellji中,我单击“运行程序”,然后屏幕上会出现一个窗口 我有一个按钮“获取数据”,在我点击它之后,我从Mysql获取数据,并将其显示在标签中 这是一种解决方案,当我们点击“运行程序”和JavaFX显示我们程序的窗口时,来自MySQL的数据将自动显示在label中 我的意思是如何在publicsvoidstart中运行getData方法(从MySQL获取数据) 我在点击按钮后显示变量“Label labelek;” “Label labelek;”位于getData方法中JavaFX场景生成器在启动程序时显示变量,javafx,Javafx,您好,我尝试在JavaFX中的start方法上从MySQL获取数据 现在在Intellji中,我单击“运行程序”,然后屏幕上会出现一个窗口 我有一个按钮“获取数据”,在我点击它之后,我从Mysql获取数据,并将其显示在标签中 这是一种解决方案,当我们点击“运行程序”和JavaFX显示我们程序的窗口时,来自MySQL的数据将自动显示在label中 我的意思是如何在publicsvoidstart中运行getData方法(从MySQL获取数据) 我在点击按钮后显示变量“Label labelek;”
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
primaryStage.setTitle("Hello World");
primaryStage.setScene(new Scene(root, 600, 275));
DBConnect connect = new DBConnect();
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
数据库连接
package sample;
import javafx.fxml.FXML;
import javafx.scene.control.Label;
import java.sql.*;
public class DBConnect {
private Connection con;
private Statement st;
private ResultSet rs;
@FXML
public Label labelek;
//utworzenie konstruktora
public DBConnect(){
try {
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://xxx","xxx",
"xxx");
st = con.createStatement();
} catch (Exception ex){
System.out.println("Error: " + ex);
}
}
public void getData(){
try {
String query = "select * from x order by id desc limit 1";
rs = st.executeQuery(query);
System.out.println("Records from DataBase");
while(rs.next()){
String TemperaturaPow = rs.getString("TemperaturaPow");
labelek.setText("Temperature is " + temperathure);
}
} catch (Exception ex){
System.out.println("Error: " + ex);
}
}
}
从
DBConnect
类中删除标签标签
。在initalize()
methodinvokeDBConnect=new DBConnect()
中创建单独的SampleController
类,并将数据附加到labelek
采样控制器
public class SampleController implements Initializable {
@FXML
private Label labelek;
@FXML
private Button getDataButton;
/**
* Initializes the controller class.
*/
@Override
public void initialize(URL url, ResourceBundle rb) {
// TODO
DBConnect connect = new DBConnect();
String data = connect.getData();
labelek.setText(data);
}
}
在我用onAction(SceneBuilder)点击按钮获取数据后,我只能在IDEA中看到 不带温度的“数据库记录”w:/ 场景生成器中的控制器类为:sample.DBConnect 真是太难了,;P
public String getData(){
try {
String query = "select * from danet order by id desc limit 1";
rs = st.executeQuery(query);
System.out.println("Records from DataBase");
while(rs.next()){
String DataCzas = rs.getString("dataczas");
String TemperaturaPow = rs.getString("TemperaturaPow");
String WilgotnoscPow = rs.getString("WilgotnoscPow");
String Cisnienie = rs.getString("baro");
String dewPoint = rs.getString("dewPoint");
String heatIndexC = rs.getString("heatIndexc");
String comment = rs.getString("comment");
return TemperaturaPow;
}
} catch (Exception ex){
System.out.println("Error: " + ex);
}
return null;
}
公共类SampleController实现可初始化{
@FXML
private Label labelek;
@FXML
private Button getDataButton;
/**
* Initializes the controller class.
*/
@Override
public void initialize(URL url, ResourceBundle rb) {
// TODO
DBConnect connect = new DBConnect();
String data = connect.getData();
labelek.setText(data);
}
感谢您回答我创建SimpleControl,创建之后,IDEA提示我添加到公共字符串getData->“return getData”因为没有它,getData不会返回任何东西。当我们启动程序时,我们可以看到JavaFX窗口中有按钮,但没有自动从MySQL加载数据:/。按钮循环getData方法:)是从
getData()
replacelabelek.setText(“温度是”+温度)
使用返回温度pOW;
我添加返回温度pOW()
而不是labelek.setText()
但是IDEA仍然希望在公共字符串getData()之后返回
return它仍然需要return
语句,因为您正在从try catch
块返回值。在catch
之后添加return null;
。我创建了新的类控制器
并在此类中创建了public void DBData()
在这个方法中,我插入所有连接到MySQL的代码并从中获取数据。然后我在void initialize()
中运行这个方法,一切正常:)