【问题标题】:JavaFX Scene builder display variable on start programJavaFX 场景构建器在启动程序上显示变量
【发布时间】:2017-02-20 12:22:17
【问题描述】:

您好,我尝试在 JavaFX 的 start 方法中从 MySQL 执行 getData 之类的操作

现在在 Intellji 中,我单击“运行程序”,然后屏幕上会出现窗口。

我有一个“获取数据”按钮,点击它后,我从 Mysql 获取数据以在标签中显示。

当我们点击“运行程序”时,我们的程序的JavaFX显示窗口和这个来自MySQL的数据会自动显示在标签中是一些解决方案?

我的意思是如何在 public void start 中运行方法 getData(从 MySQL 获取数据)?

我显示变量“Label labelek;”点击按钮后 “标签标签;”在getData方法中

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

【问题讨论】:

    标签: javafx


    【解决方案1】:

    DBConnect 类中删除Label labelek。创建单独的SampleController 类,在initalize() 方法中调用DBConnect connect = new DBConnect() 并将您的数据附加到Label labelek

    SampleController

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

    【讨论】:

    • 感谢您的回答我创建了 SimpleController 并在创建它之后,IDEA 提示我添加到 public String getData -> "return getData" 因为没有它 getData 不会返回任何东西。当我们启动程序时,我们可以看到带有 Button 的 JavaFX 窗口,但没有从 MySQL:/ 自动加载数据。按钮循环 getData 方法:)
    • 是,来自 getData()labelek.setText("Temperature is " + temperathure); 替换为 return TemperaturaPow;
    • 我添加了return TemperaturaPow() 而不是labelek.setText() 但IDEA 在public String getData(){} return <--- 之后仍然想要return 所以我添加return = getData 嗯对于初学者来说总是风吹到眼睛:)
    • 它仍然需要return 语句,因为您正在从try catch 块返回值。在catch 之后添加return null;
    【解决方案2】:

    单击带有 onAction (SceneBuilder) getData 的按钮后,我只能在 IDEA 中看到 没有 TemperaturaPow 的“来自数据库的记录”:/

    Scene Builder 中的控制器类是: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 实现 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);
    }
    

    PrintScreen

    【讨论】:

    • 我创建了新的class Controller,在这个类中我创建了public void DBData(),在这个方法中我插入了所有代码来连接到MySQL并从中获取数据。然后我在void initialize() 中运行这个方法,一切正常:)
    猜你喜欢
    • 2020-01-03
    • 1970-01-01
    • 2014-11-02
    • 2012-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-09
    相关资源
    最近更新 更多