在启动程序的JavaFX场景构建器中显示变量

问题描述:

你好,我尝试做的启动方法类似的getData从MySQL中的JavaFX在启动程序的JavaFX场景构建器中显示变量

现在Intellji我点击“运行程序”,然后在屏幕上显示窗口。

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

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

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

我显示变量“Label labelek;”点击后按钮 “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);  
    } 
} 

DBCONNECT

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从类中删除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); 
    } 
} 
+0

感谢您的回答,我创建SimpleController后创建它,IDEA促使我加入到公共字符串的getData - >“返回的getData “因为没有它,getData不会返回任何东西。当我们启动程序时,我们可以看到带有Button的JavaFX窗口,但没有自动从MySQL加载数据:/。按钮循环getData方法:) – TomaszBag

+0

是从'getData()'替换'labelek.setText(“Temperature is”+ temperathure);''with'return TemperaturaPow;' – MBec

+0

我添加'return TemperaturaPow()'而不是'labelek.setText )''但是IDEA仍然希望在'public String getData(){} return TomaszBag

后,我点击按键采用的OnAction(SceneBuilder)的getData我只能在IDEA 见 “史记从数据库” 无TemperaturaPow:/

控制器类的场景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

+0

我创建了新的'class Controller',并且在这个类中我创建了'public void DBData()',在这个方法中我插入了所有连接到MySQL的代码并从中获取数据。然后我在'void initialize()'中运行这个方法,一切正常:) – TomaszBag