JavaFX-从不同场景向TableView添加数据

JavaFX-从不同场景向TableView添加数据,java,javafx,Java,Javafx,我试图捕获从addItems.java类输入的TextField和Control Field值。然后在shoppingCartController.java类上生成的TableView上显示该数据。当我点击addItems.java文件上的add时,没有收到错误消息,但当我返回到主shoppingCartController场景时,输入的数据不在那里 以下是选择“添加”按钮时的名称: public void handleitemAdd(ActionEvent event) throws I

我试图捕获从addItems.java类输入的TextField和Control Field值。然后在shoppingCartController.java类上生成的TableView上显示该数据。当我点击addItems.java文件上的add时,没有收到错误消息,但当我返回到主shoppingCartController场景时,输入的数据不在那里

以下是选择“添加”按钮时的名称:

   public void handleitemAdd(ActionEvent event) throws IOException {
        FXMLLoader loader = new FXMLLoader();
        loader.setLocation(getClass().getResource("additems.fxml"));
        Parent addItem_page = loader.load();

        ObservableList<Products> list = FXCollections.observableArrayList();

        list.add(new Products(productPriority.toString(),
                productName.getText(),
                Double.parseDouble(productPrice.getText()),
                Integer.parseInt(productQty.getText())));
        table.getItems().add(list);

        System.out.println("Displaying information to consoles: Ensuring the addItem method worked as expected.");
    }
以及shoppingCartController,包括:

public void handleitemAdd(ActionEvent event) throws IOException {

    products.add(new Products(productPriority.toString(),
            productName.getText(),
            Double.parseDouble(productPrice.getText()),
            Integer.parseInt(productQty.getText())));

    System.out.println("Displaying information to consoles: Ensuring the addItem method worked as expected.");
}
public void setTableItems(ObservableList<Products> products) throws IOException {

    FXMLLoader loader = new FXMLLoader(getClass().getResource("shoppingcart.fxml"));
    Scene shoppingCart_scene = new Scene(loader.load());
    shoppingCartController controller =  loader.getController();
    controller.setTableItems(products);
}

但是这个值仍然没有结转,我还确保通过调试模式捕获参数。

正如@Kleopatra在评论中所说的,静态访问有时会很棘手,所以要小心,坚持java通用命名约定,因为您的代码很难跟踪 通过控制器设置列表,您可以在返回购物车时将商品传递回购物车

    FXMLLoader loader = new FXMLLoader(getClass().getResource("shoppingcart.fxml"));
    Scene shoppingCart_scene = new Scene(loader.load());
    shoppingCartController controller =  loader.getController();
    controller.setProducts(list);
在setProduct函数中,您可以更新表 或 您可以在静态函数之外创建ObservableList,但我不建议这样做,我建议您在javafx中搜索有关在控制器之间传递数据的信息,请参见下面的链接

@kleopatra没问题,我很感激你的建议。相关:不要将静态访问作为f.I.获取产品来处理任何事情。此外,它还会在每次调用时创建一个新集合,以便列表中的项与其他调用中的项不同form@kleopatra感谢您的评论,我不知道静态方法会在每次调用时创建一个新集合。您建议实现什么来解决我遇到的问题?创建新集合的不是静态方法本身,而是您的实现:我感谢您的帮助,我仍在学习Java,还有一个后续问题。我更新了addItems.java以包括:public void handleitemAddActionEvent event抛出IOException{FXMLLoader loader=new FXMLLoadergetClass.getResourceshoppingcart.fxml;Scene shoppingCart_Scene=new Sceneloader.load;shoppingCartController=loader.getController;controller.setTableItemsproducts;System.out.PrintLn向控制台显示信息:确保addItem方法有效如预期。}并向shoppingcartController添加了以下内容,但数据仍然无法通过:public void setTableItemsObjectList产品{products.addnew ProductsproductPriority.toString、productName.getText、Double.parseDoubleproductPrice.getText、Integer.parseIntproductQty.getText;}很难遵循评论中的代码。请编辑问题并添加此代码。当用户添加新项目时,应在addItem类中创建并添加产品列表。将其添加到列表中,当用户返回到前一阶段时,通过在ShoppingCartController cl中创建新函数将其与控制器一起发送回ass称为Ex.setProducts,它将产品列表作为参数并更新那里的表视图。如果您在执行soI时遇到任何问题,请随时询问。我已多次尝试使setProducts正常工作。更新表的最佳方法是什么?
<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.TableColumn?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.control.cell.PropertyValueFactory?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.text.Font?>
<?import javafx.scene.text.Text?>

<AnchorPane prefHeight="750.0" prefWidth="800.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="shoppingcart.shoppingCartController">
  <TableView fx:id="item_Table" layoutX="77.0" layoutY="174.0" prefHeight="352.0" prefWidth="646.0" tableMenuButtonVisible="true">
    <columnResizePolicy>
      <TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
    </columnResizePolicy>
    <columns>
      <TableColumn fx:id="item_Priority" editable="false" prefWidth="75.0" text="Priority">
        <cellValueFactory>
          <PropertyValueFactory property="itemPriority" />
        </cellValueFactory>
      </TableColumn>
      <TableColumn fx:id="item_Name" editable="false" prefWidth="75.0" text="Item Name">
        <cellValueFactory>
          <PropertyValueFactory property="itemName" />
        </cellValueFactory>
      </TableColumn>
      <TableColumn fx:id="item_Qty" editable="false" prefWidth="75.0" text="Item Qty">
        <cellValueFactory>
          <PropertyValueFactory property="itemQty" />
        </cellValueFactory>
      </TableColumn>
      <TableColumn fx:id="item_Price" editable="false" prefWidth="75.0" text="Item Price">
        <cellValueFactory>
          <PropertyValueFactory property="itemPrice" />
        </cellValueFactory>
      </TableColumn>
    </columns>
  </TableView>
  <Text layoutX="199.0" layoutY="119.0" scaleX="1.4035087719298245" scaleY="1.7005740221599253" strokeType="OUTSIDE" strokeWidth="0.0" text="Shopping Cart Application" wrappingWidth="401.1374694108964">
    <font>
      <Font size="34.0" />
    </font>
  </Text>
  <Button id="itemsDelete" layoutX="501.0" layoutY="571.0" mnemonicParsing="false" onAction="#handleitemDelete" prefHeight="46.0" prefWidth="222.0" text="Delete Selected" />
  <Button fx:id="itemsAdd" layoutX="77.0" layoutY="571.0" onAction="#handleitemAddition" prefHeight="46.0" prefWidth="222.0" text="Add Items" />
</AnchorPane>
public void handleitemAdd(ActionEvent event) throws IOException {

    products.add(new Products(productPriority.toString(),
            productName.getText(),
            Double.parseDouble(productPrice.getText()),
            Integer.parseInt(productQty.getText())));

    System.out.println("Displaying information to consoles: Ensuring the addItem method worked as expected.");
}
public void setTableItems(ObservableList<Products> products) throws IOException {

    FXMLLoader loader = new FXMLLoader(getClass().getResource("shoppingcart.fxml"));
    Scene shoppingCart_scene = new Scene(loader.load());
    shoppingCartController controller =  loader.getController();
    controller.setTableItems(products);
}
    FXMLLoader loader = new FXMLLoader(getClass().getResource("shoppingcart.fxml"));
    Scene shoppingCart_scene = new Scene(loader.load());
    shoppingCartController controller =  loader.getController();
    controller.setProducts(list);