2016年8月21日 星期日

fxml 控制元素

FXML 文件編排好之後,命名 id ,就可以透過 fxml controller 來控制對應元素:
*JavaFX Scene Builder

產生 FXMLDocumentController 後,裡面的 Class:

import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextArea;
import javafx.scene.text.Font;

public class FXMLDocumentController implements Initializable {

    @FXML
    private Button button;
    @FXML
    private Label label;
    @FXML
    private Font x1;
    @FXML
    private TextArea servLog; //要控制的元素,加上 FXML 標籤,會自動設定。

    /**
     * Initializes the controller class.
     */
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        // TODO
        servLog.setText("\n Hello world \n");
    }    

    @FXML
    private void handleButtonAction(ActionEvent event) {
    }
    
    public void addTextInArea(String text){ //透過外部控制 private 元素的方法
        servLog.setText(text);
    }
    
}

由於 controller 內的元素不採用 public static 之類的做法讓外部存取,所以在內部寫了一個 addTextInArea 這個方法。

透過 Main.java 啟動檔案,測試剛剛寫的方法:
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.TextArea;
import javafx.stage.Stage;

public class Main extends Application {
    
    @Override
    public void start(Stage stage) throws Exception {
        FXMLLoader loader = new FXMLLoader(getClass().getResource("FXMLDocument.fxml"));
        Parent root = loader.load();
        FXMLDocumentController controller = (FXMLDocumentController)loader.getController();
        
        Scene scene = new Scene(root);
        
        stage.setTitle("Transmission Pass : LAN Transfer Friendly");
        stage.resizableProperty().setValue(Boolean.FALSE);
        stage.setScene(scene);
        stage.show();
        
        controller.addTextArea("OKOKOK");
        
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }
    
}

沒有留言:

張貼留言

© Mac Taylor, 歡迎自由轉貼。
Background Email Pattern by Toby Elliott
Since 2014