事件发生后在javafx中更新Textfield上的值

时间:2018-09-22 21:22:41

标签: java javafx

我想在事件发生后更新JavaFx textfield上的值。我有一个RootScreen,它打开了一个popup,在那个popup中,我有一个listview。当用户选择该listview上的项目时,它应更新texfieldRootScreen上的值。 这是在每个列表项上对button进行操作的代码。每个listItem都有一个TEXTFIELDbutton来选择它。我希望将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的新手,所以不确定在这里做什么。

2 个答案:

答案 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();
    }
}

有关listView的更多信息,请检出this,您可能还希望查看对象属性here