2017-02-20 87 views
0

你好,我嘗試做的啓動方法類似的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); 
     } 
    } 
} 

回答

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); 
    } 
} 
+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 <---'之後返回''''因此我爲初學者添加'return = getData'.hmm總是吹到眼睛:) – TomaszBag

0

後,我點擊按鍵採用的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