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