首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在JavaFX 8中管理多个屏幕

如何在JavaFX 8中管理多个屏幕
EN

Stack Overflow用户
提问于 2015-10-16 16:40:41
回答 2查看 6.6K关注 0票数 3

我是新来的JavaFX,有一些问题。

假设我有两个fxml文件,以及相应的控制器类。每个fxml都有一个按钮,它应该打开另一个屏幕并传递一个参数。

有没有人能举个例子,说明谷歌是如何做到这一点的,谷歌没有任何帮助。

EN

回答 2

Stack Overflow用户

发布于 2015-10-17 05:06:51

这里的“屏幕”是指JavaFX Stage实例,对吧?如果是这样,那就相当简单了:

  1. 加载第二个fxml文件
  2. 通过FXML加载器获取控制器实例
  3. 通过调用控制器上的setter方法传递“参数”。

唯一有点不寻常的事情是获取控制器引用。您需要创建一个FXMLoader实例。它不适用于通常称为静态方法的方法:

(应用程序的主类)

代码语言:javascript
复制
public class MyFXMLApp extends Application {

  @Override
  public void start(Stage stage) throws Exception {

    FXMLLoader loader = new FXMLLoader();
    loader.setLocation(getClass().getResource("MainForm.fxml"));

    Parent root = (Parent) loader.load();

    // as soon as the load() method has been invoked, the scene graph and the 
    // controller instance are availlable:
    MainFormController controller = loader.getController();
    controller.setText("Ready.");

    Scene scene = new Scene(root);
    stage.setScene(scene);
    stage.show();

  // ...

(控制器)

代码语言:javascript
复制
  public class MainFormController implements Initializable {

    // some ui control:
    @FXML
    private Label label;

    // JavaFX property for values that shall be accessible from outside:
    private final StringProperty text = new SimpleStringProperty();

    public String getText() {
      return text.get();
    }

    public void setText(String value) {
      text.set(value);
    }

    public StringProperty textProperty() {
      return text;
    }

    @Override
    public void initialize(URL url, ResourceBundle rb) {
      System.out.println("MainFormController.initialize");
      this.label.textProperty().bind(this.text);
    }

  // ...

该示例使用JavaFX属性在控制器中保存“参数”-因此,可以很容易地观察到该值及其更改,并且该属性可以绑定到任何其他字符串属性。

票数 1
EN

Stack Overflow用户

发布于 2017-03-24 10:54:17

代码语言:javascript
复制
@FXML
public void handleAddPartAction(ActionEvent event) throws IOException {
        Stage stage; 
     Parent root;

        //get reference to the button's stage         
        stage=(Stage) partAddButton.getScene().getWindow();
        //load up OTHER FXML document
  root = FXMLLoader.load(getClass().getResource("AddPart.fxml"));
  Scene scene = new Scene(root);
      stage.setScene(scene);
      stage.show();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33166012

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档