如何在另一个JavaFX控制器中设置JavaFX TextField控制器中的字符串或文本

时间:2014-11-01 14:26:58

标签: java javafx-8

在我的javafx应用程序中,我们有两个FXML文件first.fxml和second.fxml,同样是firstController.java和secondController.java现在主要问题是first.fxml包含TextField名称和on Button 当用户点击该按钮时,second.fxml显示在second.fxml中我有一个ComboBox和一个Button当用户点击second.fxml按钮我想将该组合框值设置为first.fxml名称TextField。

我在过去三天在Google上找到了解决方案,但没有得到正确的解决方案。在Java swing中,我使用静态公共字段来执行此操作,这允许我从另一个JFrame访问JFrame。

急切地等待有用的回复。

1 个答案:

答案 0 :(得分:0)

StringProperty公开SecondController。按下按钮时,设置其值:

public class SecondController {

    private final StringProperty selectedValue = new SimpleStringProperty(this, "selectedValue", "");

    public final StringProperty selectedValueProperty() {
        return selectedValue ;
    }

    public final void setSelectedValue(String value) {
        selectedValue.set(value);
    }

    public final String getSelectedValue() {
        return selectedValue.get();
    }

    @FXML
    private final ComboBox<String> comboBox ;

    @FXML
    private void handleButtonPress() {
        selectedValue.set(comboBox.getValue());
    }
}

FirstController中,提供设置文字的方法:

public class FirstController {
    @FXML
    private TextField textField ;

    public void setText(String text) {
        textField.setText(text);
    }
}

现在,当您加载FXML文件时,只需观察SecondController中的属性,并在FirstController更改时调用该方法:

FXMLLoader firstLoader = new FXMLLoader(getClass().getResource("first.fxml"));
Parent first = firstLoader.load();
FirstController firstController = firstLoader.getController();

FXMLLoader secondLoader = new FXMLLoader(getClass().getResource("second.fxml"));
Parent second = secondLoader.load();
SecondController secondController = secondLoader.getController();

secondController.selectedValueProperty().addListener((obs, oldValue, newValue) -> 
    firstController.setText(newValue));