栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

JavaFX-如何在另一个控制器中的一个控制器中使用方法?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JavaFX-如何在另一个控制器中的一个控制器中使用方法?

“快速又脏”的方法是给的

Stage1Controller
引用
Stage2Controller

public class Stage1Controller {    private final Stage2Controller stage2Controller ;    public void setStage2Controller(Stage2Controller stage2Controller) {        this.stage2Controller = stage2Controller ;    }    // ...    @FXML     private void handleTranslate (ActionEvent event){        translateFirstStage();        stage2Controller.setLabel(...);    }    // other pre as before ...}

现在在您的主应用程序中:

public class MainApp  extends Application {    private Stage1Controller stage1Controller ;    private Stage2Controller stage2Controller ;    @Override    public void start(Stage primaryStage) {        firstStage();        secondStage();        stage1Controller.setStage2Controller(stage2Controller);        // ...    }    public void firstStage() {        try { // Load root layout from fxml file. FXMLLoader loader = new FXMLLoader(); loader.setLocation(Main.class.getResource("view/stage1.fxml")); rootLayout = (BorderPane) loader.load(); stage1Controller = loader.getController(); // Show the scene containing the root layout. Scene scene = new Scene(rootLayout); primaryStage.setScene(scene); primaryStage.show();        } catch (IOException e) { e.printStackTrace();        }    }    public void secondStage() {        try { // Load root layout from fxml file. FXMLLoader loader = new FXMLLoader(); loader.setLocation(Main.class.getResource("view/stage2.fxml")); XD = (AnchorPane) loader.load(); stage2Controller = loader.getController(); // Show the scene containing the root layout. Scene scene = new Scene(XD); Stage stage = new Stage(); stage.setScene(scene); stage.show();        } catch (IOException e) { e.printStackTrace();        }    }    // ...}

但是,更可靠的方法是让两个控制器访问共享的模型类,并存储数据。如果使用JavaFX可观察属性表示数据,则控制器可以侦听其关心的属性的更改。例如:

public class Model {    private final StringProperty text = new SimpleStringProperty("Initial text...");    public StringProperty textProperty() {        return text ;    }    public final void setText(String text) {        textProperty().set(text);    }    public final String getText() {        return textProperty().get();    }    // other properties as needed...}

现在,您的控制器将如下所示:

public class Stage1Controller {    private Model model ;    public void setModel(Model model) {        this.model = model ;    }    @FXML     private void handleTranslate (ActionEvent event){        translateFirstStage();        model.setText(...); // value will appear in stage2 controller's label!    }    // ...}

public class Stage2Controller {    @FXML    private Label lb ;    private Model model ;    public void setModel(Model model) {        lb.textProperty().unbind();        this.model = model ;        lb.textProperty().bind(model.textProperty());    }    // ...}

在这种情况下,您的主应用程序如下所示:

public class MainApp extends Application {    private final Model = new Model();    @Override    public void start(Stage primaryStage) {        // ...    }    public void firstStage() {        try { // Load root layout from fxml file. FXMLLoader loader = new FXMLLoader(); loader.setLocation(Main.class.getResource("view/stage1.fxml")); rootLayout = (BorderPane) loader.load(); Stage1Controller controller = loader.getController(); controller.setModel(model); // Show the scene containing the root layout. Scene scene = new Scene(rootLayout); primaryStage.setScene(scene); primaryStage.show();        } catch (IOException e) { e.printStackTrace();        }    }    public void secondStage() {        try { // Load root layout from fxml file. FXMLLoader loader = new FXMLLoader(); loader.setLocation(Main.class.getResource("view/stage2.fxml")); XD = (AnchorPane) loader.load(); Stage2Controller controller = loader.getController(); controller.setModel(model); // Show the scene containing the root layout. Scene scene = new Scene(XD); Stage stage = new Stage(); stage.setScene(scene); stage.show();        } catch (IOException e) { e.printStackTrace();        }    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/486244.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号