Swapnil722 Ответов: 0

Как передать значения уже открытому этапу(первому контроллеру) из второго контроллера?


У меня есть два контроллера

1. ' FXMLDocumentController` имеет `TableView` CustomerTable.
2. `NewCustomerController` второй контроллер для добавления новой строки.

Я могу передавать значения от первого контроллера ко второму контроллеру.
Но я не могу вернуть его со второго контроллера на первый контроллер.


Что я уже пробовал:

FXMLDocument.FXML-файл

<AnchorPane id="AnchorPane" prefHeight="283.0" prefWidth="437.0"     xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1"fx:controller="mytableview.FXMLDocumentController">
        <children>
            <Button fx:id="button" layoutX="309.0" layoutY="25.0" onAction="#handleButtonAction" text="New Customer" />
          <TableView fx:id="customerTable" layoutX="6.0" layoutY="61.0" prefHeight="215.0" prefWidth="426.0">
            <columns>
              <TableColumn fx:id="custname" prefWidth="75.0" text="Customer Name" />
              <TableColumn fx:id="city" prefWidth="75.0" text="City" />
            </columns>
             <columnResizePolicy>
                <TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
             </columnResizePolicy>
          </TableView>
        </children>
    </AnchorPane>



NewCustomer.FXML-файл

<AnchorPane id="AnchorPane" prefHeight="172.0" prefWidth="209.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8.0.171" fx:controller="com.newcustomer.NewCustomerController">
    <children> 
<Button layoutX="141.0" layoutY="129.0" mnemonicParsing="false" onAction="#newCustomer" text="Add" />
        <TextField fx:id="cNameTextField" layoutX="14.0" layoutY="26.0" promptText="Customer Name" />
   <pre><pre lang="xml"> <TextField fx:id="custCityTextField" layoutX="14.0" layoutY="77.0" promptText="City" />
    </children>
</AnchorPane>




FXMLDocumentController.java

public class FXMLDocumentController implements Initializable {

   @FXML
   public TableView<Customer> customerTable;

   @FXML
   public TableColumn<Customer, String> custname;

   @FXML
   public TableColumn<Customer, String> city;

   @Override
   public void initialize(URL url, ResourceBundle rb) {
   }

   @FXML
   private void handleButtonAction(ActionEvent event) throws IOException {
       Parent parent = FXMLLoader.load(getClass().getResource("/com/newcustomer/NewCustomer.fxml"));
       Stage stage = new Stage();
       Scene scene = new Scene(parent);
       stage.setScene(scene);
       stage.show();
   }

   public void inflateUI(Customer customer) {
       custname.setCellValueFactory(new PropertyValueFactory<>("name"));
       city.setCellValueFactory(new PropertyValueFactory<>("city"));
       customerTable.getItems().add(customer);
   }


NewCustomerController.java

public class NewCustomerController implements Initializable {

   @FXML
   private TextField cNameTextField;

   @FXML
   private TextField custCityTextField;

   @Override
   public void initialize(URL url, ResourceBundle rb) {
   }

   public void newCustomer(ActionEvent e) throws IOException {
       String name = cNameTextField.getText();
       String stringCity = custCityTextField.getText();

       Customer customer = new Customer(10, name, stringCity);
       FXMLLoader fXMLLoader = new FXMLLoader(getClass().getResource("/mytableview/FXMLDocument.fxml"));
       FXMLDocumentController fXMLDocumentController = fXMLLoader.<FXMLDocumentController>getController();
       fXMLDocumentController.inflateUI(customer); // Getting NPE at this line.
       }

   }


MyTableView.java

public class MyTableView extends Application {
    
        public MyTableView() {
        }
    
        @Override
        public void start(Stage stage) throws Exception {
            Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));
    
            Scene scene = new Scene(root);
    
            stage.setScene(scene);
            stage.show();
        }
    
        public static void main(String[] args) {
            launch(args);
        }
    
    }


Я получаю NPE здесь на этой линии
fXMLDocumentController.inflateUI(customer); // Getting NPE at this line.

В NewCustomerController.java.

Вот исходный код Uploadfiles.io - MyTableView.zip[^]

0 Ответов