在我的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。
急切地等待有用的回复。
答案 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));