我想在Window2关闭JAVAFX后立即在window1上创建一个事件(添加了更多细节)

我想在Window2关闭JAVAFX后立即在window1上创建一个事件(添加了更多细节),java,javafx,javafx-2,javafx-8,Java,Javafx,Javafx 2,Javafx 8,我有两扇窗户。 Window1通过单击按钮启动Window2。 我想在Windows 2关闭后立即更改窗口1中文本字段的文本 有没有办法在窗口2关闭后立即在窗口1中创建事件 我使用fxml,所以每个窗口都有不同的控制器和fxml文件 第一个窗口主要是一个表视图和一些文本字段,用来填充由mysql数据库连接的数据。下面是代码 package sample; import javafx.collections.FXCollections; import javafx.col

我有两扇窗户。 Window1通过单击按钮启动Window2。 我想在Windows 2关闭后立即更改窗口1中文本字段的文本

有没有办法在窗口2关闭后立即在窗口1中创建事件

我使用fxml,所以每个窗口都有不同的控制器和fxml文件

第一个窗口主要是一个表视图和一些文本字段,用来填充由mysql数据库连接的数据。下面是代码

    package sample;

    import javafx.collections.FXCollections;
    import javafx.collections.ObservableList;
    import javafx.collections.transformation.FilteredList;
    import javafx.collections.transformation.SortedList;
    import javafx.event.ActionEvent;
    import javafx.fxml.FXML;
    import javafx.fxml.FXMLLoader;
    import javafx.fxml.Initializable;
    import javafx.scene.Parent;
    import javafx.scene.Scene;
    import javafx.scene.control.*;
    import javafx.stage.Modality;
    import javafx.stage.Stage;

    import javax.print.attribute.standard.MediaSize;
    import java.io.IOException;
    import java.net.URL;
    import java.sql.*;
    import java.util.ResourceBundle;

    public class TableData implements Initializable {

        @FXML
        private TableColumn<Data, String> COMPANYCOL;

        @FXML
        private TableColumn<Data, ?> DATECOL;

        @FXML
        private TextArea AddressField;

        @FXML
        private TableColumn<Data, Integer> IDCOL;

        @FXML
        TextField RefernceField;

        @FXML
        private Label searchLabel;

        @FXML
        private MenuItem FilterMenuItem;

        @FXML
        private Label FilterLabel;

        @FXML
        private TextField FilterField;


        @FXML
        private TableView<Data> TABLEVIEWID;

        @FXML
        private TableColumn<Data, Double> PHONENOCOL;

        @FXML
        private TextField SearchField;

        Stage stage;
        @FXML
        private TableColumn<Data, String> ADDRESSCOL;

        @FXML
        private TextField PhoneNoField;

        @FXML
        private TextField NameField;

        @FXML
        private Button AddButton;

        @FXML
        private TableColumn<Data, String> NAMECOL;

        @FXML
        private TableColumn<Data, String> REFRENCECOL;

        @FXML
        private TextField CompanyField;
        Stage primaryStage= new Stage();





        private Config config = new Config();
        ObservableList<Data> Mainlist = FXCollections.observableArrayList();

            Connection drdoConnection = DatabaseConnection.getConnectionDrdo();
            Connection MydatabaseConnection = DatabaseConnection.getConnectionOwn();

        public TableData() throws Exception {
        }


    int q;
       RefrenceController refrenceController= new RefrenceController();
        int icno=0;


        @Override
        public void initialize(URL location, ResourceBundle resources) {

            if(drdoConnection!=null&&MydatabaseConnection!=null) {

                RefernceField.setEditable(false);







                config.factory(IDCOL, "id");
                config.factory(NAMECOL, "name");
                config.factory(COMPANYCOL, "company");
                config.factory(ADDRESSCOL, "address");
                config.factory(PHONENOCOL,"phoneno");
                config.factory(REFRENCECOL, "refrence");

                try {
                    Statement statement= drdoConnection.createStatement();

                    ResultSet resultSet= statement.executeQuery("SELECT * FROM drdomy");

                    while (resultSet.next()){
                         q=  resultSet.getInt("id");
                        Mainlist.addAll(new Data(q,resultSet.getString("name"),resultSet.getString("company"),
                                resultSet.getString("address"),resultSet.getDouble("phoneno"),resultSet.getString("Refrence")));
                    }

                    TABLEVIEWID.getItems().addAll(Mainlist);
                    Parent root = FXMLLoader.load(getClass().getResource("Ref.fxml"));
                    primaryStage.setTitle("Ref Window");
                    primaryStage.initModality(Modality.APPLICATION_MODAL);
                    primaryStage.setScene(new Scene(root));

//this is the code that is giving that nullPointerException
//I have tried Every Possible Step But Coudn't resolve it 
                    primaryStage.setOnCloseRequest(e->{

                         RefernceField.setText(String.valueOf(refrenceController.OnSubmitButtonClicked()));

                          });


                } catch (SQLException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }


            }
            else {
                config.alert(Alert.AlertType.ERROR, "Database Server May be Down Check Logs");

            }
        }

        @FXML
        void TableAddButtonAction(ActionEvent event) throws SQLException {
            String query= "INSERT INTO drdomy (id,name,company,address,phoneno,Refrence) VALUES (?,?,?,?,?,?)";
            PreparedStatement statement = drdoConnection.prepareStatement(query);
            statement.setInt(1,++q);
            statement.setString(2,NameField.getText());
            statement.setString(3,CompanyField.getText());
            statement.setString(4,AddressField.getText());
            statement.setDouble(5,Double.parseDouble(PhoneNoField.getText()));
            statement.setString(6,RefernceField.getText());

            statement.execute();
            TABLEVIEWID.getItems().clear();

            Mainlist.addAll(new Data(q,NameField.getText(),CompanyField.getText(),AddressField.getText(),Double.parseDouble(String.valueOf(PhoneNoField.getText())),RefernceField.getText()));
            TABLEVIEWID.getItems().addAll(Mainlist);

            NameField.clear();
            CompanyField.clear();
            AddressField.clear();
            PhoneNoField.clear();
            RefernceField.clear();
            statement.close();

            stage = (Stage) AddButton.getScene().getWindow();

            stage.setOnCloseRequest(e->{
                try {
                    drdoConnection.close();
                } catch (SQLException e1) {
                    e1.printStackTrace();
                }
            });










        }

        @FXML
        void FilterActionMenuItem(ActionEvent event) {

            FilterField.setScaleY(1);
            FilterField.setScaleX(1);
            FilterField.setScaleZ(1);
            FilterLabel.setScaleX(1);
            FilterLabel.setScaleY(1);
            FilterLabel.setScaleZ(1);


        }

        @FXML
        void KeyRealesedFilterField() {


            FilteredList<Data> dataFilteredList = new FilteredList<Data>(Mainlist,p-> true);
            FilterField.textProperty().addListener((observable ,oldValue,newValue )->{

                dataFilteredList.setPredicate(data -> {

                    if (newValue== null|| newValue.isEmpty())
                        return true;

                    String lowercase= newValue.toLowerCase();
                    int p=data.getId();


                    if (data.getAddress().toLowerCase().contains(lowercase)){
                        return true;
                    }
                    else if(String.valueOf(p).contains(newValue)){
                        return true;
                    }
                    else if(String.valueOf(data.getPhoneno()).contains(newValue))
                        return true;

                   else if (data.getRefrence().toLowerCase().contains(lowercase)){
                       return true;
                   }
                    else if(data.getName().toLowerCase().contains(lowercase)){
                        return true;
                    }
                    else if (data.getCompany().toLowerCase().contains(lowercase)){
                        return true;
                    }




                    return false;

                });

                SortedList<Data> dataSortedList = new SortedList<Data>(dataFilteredList);
                dataSortedList.comparatorProperty().bind(TABLEVIEWID.comparatorProperty());
                TABLEVIEWID.setItems(dataSortedList);
            });


        }



        @FXML
        void OnRefAction() throws IOException {



            primaryStage.showAndWait();




        }



    }

在关闭请求、隐藏或隐藏时设置
EventHandler
。选择您需要的:

Stage secondaryStage = new Stage();
secondaryStage.setOnCloseRequest(ev -> {
    //change text in TextField
});
secondaryStage.setOnHidden(ev -> {
    //or change text in TextField
});
secondaryStage.setOnHiding(ev -> {
    //or change text in TextField
});

在关闭请求、隐藏或隐藏时设置
EventHandler
。选择您需要的:

Stage secondaryStage = new Stage();
secondaryStage.setOnCloseRequest(ev -> {
    //change text in TextField
});
secondaryStage.setOnHidden(ev -> {
    //or change text in TextField
});
secondaryStage.setOnHiding(ev -> {
    //or change text in TextField
});

如果要在窗口关闭后立即创建事件
使用即将关闭的窗口阶段使用setOnCloseRequest。

如果希望在窗口关闭后立即创建事件

使用即将关闭的窗口阶段使用setOnCloseRequest。

我的问题得到了一个-ve点为什么?我的问题有问题吗?如果是,请评论。也许我会向你解释。在你启动第二个窗口的按钮处理程序中,你的最后一段代码应该显示并等待。在这个show-and-wait方法的正下方是您应该在TextField中放置“//change text”的地方。我的问题有一个-ve点为什么?我的问题有问题吗?如果是,请评论。也许我会向你解释。在你启动第二个窗口的按钮处理程序中,你的最后一段代码应该显示并等待。在这个show and wait方法的正下方是您应该在TextField中放置“//change text”的地方。两个窗口都有不同的控制器。如何处理控制器之间的数据交换取决于您自己。关于这个问题,在SO上有很多帖子。嘿,谢谢,现在它可以工作了,但只有当我点击右上角的红十字,而不是按primaryStage.setOnCloseRequest(e->{referencefield.setText(“Man”);}按钮还用于关闭窗口2控制器中的场景。两个窗口都有不同的控制器。如何处理控制器之间的数据交换,取决于您。关于这个问题,有很多关于SO的帖子。嘿,谢谢,现在它可以工作了,但只有当我单击右上角的红十字时,它才起作用,但不是通过按钮primaryStage。setOnCloseRequest(e->{referencefield.setText(“Man”);}按钮也用于关闭窗口2控制器中的场景
Stage secondaryStage = new Stage();
secondaryStage.setOnCloseRequest(ev -> {
    //change text in TextField
});
secondaryStage.setOnHidden(ev -> {
    //or change text in TextField
});
secondaryStage.setOnHiding(ev -> {
    //or change text in TextField
});