java - 从 fxml 加载器访问 fxml Controller 的方法

标签 java javafx scene

我想要做的是,如果调整场景(应用程序窗口)的大小,我想相应地调整窗口内内容的大小。我已经发布了到目前为止我已经完成的代码

加载器类

public class ResizingButtons extends Application {

@Override

public void start(Stage stage) throws Exception {

    Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));
    Scene scene = new Scene(root);
    stage.setScene(scene);
    stage.show();
    scene.widthProperty().addListener(new ChangeListener<Number>() {

        @Override
        public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
            try{
            System.out.println("Scene Width Property is " + scene.getWidth());
            }
            catch(Exception e){
                System.out.println("Error in width listener of scene" +e.getMessage());
            }
        }
    });   
}

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

这是FXMLDocument.fxml fxml类的 Controller

public class FXMLDocumentController implements Initializable {

@FXML
public Button btn1;

@Override
public void initialize(URL url, ResourceBundle rb) {
    // TODO
}    

public void changeBtnSize(){
    btn1.setPrefHeight(200);
    btn1.setStyle("-fx-background-color:red");
  }
}

当调整窗口大小时,我想访问 Controller 类的changeBtnSize()方法。

最佳答案

您可以从FXMLLoader获取 Controller 实例。像这样重构你的代码:

@Override
public void start(Stage stage) throws Exception {
    FXMLLoader loader = new FXMLLoader(getClass().getResource("FXMLDocument.fxml")); // Use loader instance
    Parent root = loader.load();
    FXMLDocumentController controller = loader.getController(); // Now you have controller refference here
    //add your listener, feel free to use your controller inside listener implementation
}

关于java - 从 fxml 加载器访问 fxml Controller 的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25802926/

相关文章:

java - Android 从 EditText 进行整数转换失败

java - 如何在 Java 中使用两个参数创建 ObservableBooleanValue?

java - 更改 JavaFX MediaPlayer 播放速度

java - 如何在另一个已激活时加载 FXML?

unity3d - 显示 1 无相机渲染

swift - 如何从另一个类调用变量,特别是 scnscene 到 skoverlay 场景

Java JRE 与 GCJ

java - 如何使用 Java 而不是 XML 将 hbase 与 Spring Boot 一起使用?

java - 寻找 java SFTP 现代库,而不是 jsch

combobox - JavaFX ComboBox 设置 ObservableList 中的项目