我想在事件发生后更新JavaFx textfield
上的值。我有一个RootScreen
,它打开了一个popup
,在那个popup
中,我有一个listview
。当用户选择该listview
上的项目时,它应更新texfield
中RootScreen
上的值。
这是在每个列表项上对button
进行操作的代码。每个listItem都有一个TEXTFIELD
和button
来选择它。我希望将TEXTFIELD
上的texfield
上的值放在RootScreen
的{{1}}上。请尽量查看大小写,因为我试图使其尽可能地易于理解。
public void initialize() {
button.setOnAction(event -> {
source = select.getParent();
//walletname is the name i want on textfield.
walletName = textField.getText();
getWalletName(walletName);
Stage stage = (Stage) source.getScene().getWindow();
stage.close();
});
}
private void getWalletName(String walletName){
profilePopup.SetText(walletName,rootScreenController);
}
SetText
方法位于Popup View Class
中。 SetText
方法的代码。
public void SetText(String walletName, OnClick onClick){
onClick.onMouseClicked(walletName);
}
我有一个interface OnClick
,它有一个onMouseClicked
方法。我在RootScreen
public interface OnClick {
void onMouseClicked(String name);
}
这就是我在界面中重写方法的方式。
@Override
public void onMouseClicked(String walletName) {
textfield.setText(walletname);
}
但是它不会更新文本字段上的值。 我是Java的新手,所以不确定在这里做什么。
答案 0 :(得分:0)
如果您有一个弹出屏幕,用于填充ListView中的信息,那么我认为最好是ListView条目是Object还是集合中的Object。这是分离ListView上每个条目的唯一方法-从对象中提取信息,而不是从ListView派生出一个单项。
答案 1 :(得分:0)
这是一个可运行的示例,我认为您可以解决此问题,可以使用.setOnMouseClicked
功能来简化此操作
public class Main extends Application {
public static void main(String[] args) { launch(args); }
@Override
public void start(Stage primaryStage) {
TextField textField = new TextField("Not the same");
ListView<String> listView = new ListView<>();
listView.getItems().add("Item 1");
listView.getItems().add("Item 2");
listView.getItems().add("Item 3");
listView.setOnMouseClicked(event -> {//You can change this if need be
textField.setText(listView.getSelectionModel().getSelectedItem());
});
VBox vBox = new VBox();
vBox.getChildren().addAll(listView, textField);
Scene scene = new Scene(vBox);
primaryStage.setScene(scene);
primaryStage.show();
}
}