qifenxian 发表于 2024-1-5 15:21:41

1

@FishC
// 创建一般用户页面的方法
    private void createUserOperationPage(Stage stage) {
      Pane UserOperationRoot = new Pane();

      Image backgroundImage = new Image("file:src/main/java/img/beijing.jpg");
      ImageView backgroundView = new ImageView(backgroundImage);
      backgroundView.setFitWidth(800);
      backgroundView.setFitHeight(600);
      UserOperationRoot.getChildren().add(backgroundView);

      // 创建菜单栏
      MenuBar menuBar = new MenuBar();
      Menu exitMenu = new Menu("退出系统");
      MenuItem exitMenuItem = new MenuItem("退出系统");
      exitMenu.getItems().add(exitMenuItem);
      exitMenuItem.setOnAction(actionEvent -> {
            stage.setScene(root.getScene());
      });
      Menu sellFlowerMenu = new Menu("售卖鲜花");
      MenuItem sellFlowerMenuItem = new MenuItem("售卖鲜花");
      sellFlowerMenu.getItems().add(sellFlowerMenuItem);
      Menu queryFlowerMenu = new Menu("查询鲜花");
      MenuItem queryFlowerByItem = new MenuItem("查询");
      queryFlowerMenu.getItems().add(queryFlowerByItem);
      menuBar.getMenus().addAll(exitMenu,sellFlowerMenu,queryFlowerMenu);
      UserOperationRoot.getChildren().add(menuBar);
      sellFlowerMenuItem.setOnAction(actionEvent -> {
            sellflower(UserOperationRoot);
      });
      queryFlowerByItem.setOnAction(actionEvent -> {
            queryFlower(UserOperationRoot);
      });
      Scene UserOperationScene = new Scene(UserOperationRoot, 800, 600);
      stage.setScene(UserOperationScene);
    }

    private void queryFlower(Pane UserOperationRoot) {
      flowerLayout1.setAlignment(Pos.CENTER);
      // 创建标签和输入框
      Label searchByIdLabel = new Label("通过ID查询:");
      TextField idInput = new TextField();
      idInput.setPromptText("输入鲜花ID");
      Label searchByNameLabel = new Label("通过花名查询:");
      TextField nameInput = new TextField();
      nameInput.setPromptText("输入花名");
      Label resultLabel = new Label();// 用于显示查询结果
      resultLabel.setFont(new Font(20));// 设置字体大小为20

      Button searchButton = new Button("查询");
      searchButton.setOnAction(actionEvent -> {
            String id = idInput.getText();
            String name = nameInput.getText();
            // 查询数据库,根据ID或花名进行查询
            Flower flower = null;
            if (!id.isEmpty()) {
                // 通过ID查询
                flower = queryFlowerById(id);
            } else if (!name.isEmpty()) {
                // 通过花名查询
                flower = queryFlowerByName(name);
            }

            if (flower != null) {
                // 显示查询结果
                resultLabel.setText("查询结果: ID-" + flower.getId() + " 花名-" + flower.getFlowername() + " 价格-" + flower.getPrice() + " 库存-" + flower.getStock());
            } else {
                resultLabel.setText("未找到匹配的鲜花");
            }
            idInput.clear();
            nameInput.clear();
      });

      flowerLayout1.getChildren().addAll(searchByIdLabel, idInput, searchByNameLabel, nameInput, searchButton, resultLabel);
      // 设置布局位置
      flowerLayout1.setLayoutX(200);
      flowerLayout1.setLayoutY(200);
      // 将布局添加到UserOperationRoot
      UserOperationRoot.getChildren().add(flowerLayout1);
    }
private void sellflower(Pane UserOperationRoot) {
      flowerLayout2.setAlignment(Pos.CENTER);
      // 创建标签和输入框
      Label flowerIdLabel = new Label("鲜花ID:");// 添加标签以提供文字提示
      TextField flowerIdInput = new TextField();
      flowerIdInput.setPromptText("输入鲜花ID");
      Label quantityLabel = new Label("数量:");// 添加标签以提供文字提示
      TextField quantityInput = new TextField();
      quantityInput.setPromptText("输入数量");

      // 创建购物车列表
      ListView<String> shoppingCart = new ListView<>();
      Button sellButton = new Button("加入购物车");
      sellButton.setOnAction(actionEvent -> {
            String flowerId = flowerIdInput.getText();
            int quantity = Integer.parseInt(quantityInput.getText());
            // 查询数据库,查找是否存在鲜花ID
            boolean flowerExists = checkFlowerIdExists(flowerId);
            if (flowerExists) {
                // 将售卖的鲜花存入购物车
                shoppingCart.getItems().add("鲜花ID: " + flowerId + " 数量: " + quantity);
            }
            flowerIdInput.clear();
            quantityInput.clear();
      });

      Button checkoutButton = new Button("结算");
      checkoutButton.setOnAction(actionEvent -> {
            // 计算购物车中的鲜花价格
            int totalPrice = calculateTotalPrice(shoppingCart.getItems());
            // 弹窗提示本次消费
            Alert alert = new Alert(Alert.AlertType.INFORMATION);
            alert.setTitle("结算");
            alert.setHeaderText("本次消费");
            alert.setContentText("购物车中鲜花的总价格为: " + totalPrice + "元");
            alert.showAndWait();
            shoppingCart.getItems().clear();// 清空购物车
      });

      flowerLayout2.getChildren().addAll(flowerIdLabel, flowerIdInput, quantityLabel, quantityInput, sellButton, shoppingCart, checkoutButton);
      // 设置布局位置
      flowerLayout2.setLayoutX(300);
      flowerLayout2.setLayoutY(10);
      // 将布局添加到UserOperationRoot
      UserOperationRoot.getChildren().add(flowerLayout2);
    }如何点击查询前清空页面中的布局,点击销售也可以

FishC 发表于 2024-1-5 15:21:50

要清空页面中的布局,在点击查询或销售之前,需要先移除之前添加到布局中的子节点。可以在每次点击查询或销售之前,调用`UserOperationRoot.getChildren().clear()`方法来清空布局。这样,在每次点击查询或销售时,都会先移除之前的布局,然后重新创建新的布局。

以下是修改后的代码示例:

private void queryFlower(Pane UserOperationRoot) {
    // 清空布局
    UserOperationRoot.getChildren().clear();

    flowerLayout1.setAlignment(Pos.CENTER);
    // ...
    // 其他代码不变
}

private void sellflower(Pane UserOperationRoot) {
    // 清空布局
    UserOperationRoot.getChildren().clear();

    flowerLayout2.setAlignment(Pos.CENTER);
    // ...
    // 其他代码不变
}

这样,在每次点击查询或销售之前,都会清空页面中的布局,然后根据新的操作重新创建布局。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

qifenxian 发表于 2024-1-5 15:23:37

FishC 发表于 2024-1-5 15:21
要清空页面中的布局,在点击查询或销售之前,需要先移除之前添加到布局中的子节点。可以在每次点击查询或销 ...

不能全部清空需要保留菜单栏和背景

FishC 发表于 2024-1-5 15:23:46

qifenxian 发表于 2024-01-05 15:23
不能全部清空需要保留菜单栏和背景

如果你只想清空布局中的特定元素,而保留菜单栏和背景图像,可以使用以下方法:

首先,将需要清空的部分封装在一个 `Pane` 中,例如使用 `FlowPane` 或 `VBox`。然后,在每次点击查询或销售之前,先移除该特定元素即可。

以下是修改后的代码示例:

private void queryFlower(Pane UserOperationRoot) {
    // 清空布局中的特定元素
    flowerLayout1.getChildren().clear();

    // ... 其他代码
}

private void sellflower(Pane UserOperationRoot) {
    // 清空布局中的特定元素
    flowerLayout2.getChildren().clear();

    // ... 其他代码
}

这样,每次点击查询或销售时,只会清空布局中的特定元素,而菜单栏和背景图像会保留。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

qifenxian 发表于 2024-1-5 15:27:31

FishC 发表于 2024-1-5 15:23
如果你只想清空布局中的特定元素,而保留菜单栏和背景图像,可以使用以下方法:

首先,将需要清空的 ...

// 创建一般用户页面的方法
    private void createUserOperationPage(Stage stage) {
      Pane UserOperationRoot = new Pane();

      Image backgroundImage = new Image("file:src/main/java/img/beijing.jpg");
      ImageView backgroundView = new ImageView(backgroundImage);
      backgroundView.setFitWidth(800);
      backgroundView.setFitHeight(600);
      UserOperationRoot.getChildren().add(backgroundView);

      // 创建菜单栏
      MenuBar menuBar = new MenuBar();
      Menu exitMenu = new Menu("退出系统");
      MenuItem exitMenuItem = new MenuItem("退出系统");
      exitMenu.getItems().add(exitMenuItem);
      exitMenuItem.setOnAction(actionEvent -> {
            stage.setScene(root.getScene());
      });
      Menu sellFlowerMenu = new Menu("售卖鲜花");
      MenuItem sellFlowerMenuItem = new MenuItem("售卖鲜花");
      sellFlowerMenu.getItems().add(sellFlowerMenuItem);
      Menu queryFlowerMenu = new Menu("查询鲜花");
      MenuItem queryFlowerByItem = new MenuItem("查询");
      queryFlowerMenu.getItems().add(queryFlowerByItem);
      menuBar.getMenus().addAll(exitMenu,sellFlowerMenu,queryFlowerMenu);
      UserOperationRoot.getChildren().add(menuBar);
      sellFlowerMenuItem.setOnAction(actionEvent -> {
            UserOperationRoot.getChildren().clear();
            UserOperationRoot.getChildren().addAll(menuBar,backgroundView);
            sellflower(UserOperationRoot);
      });
      queryFlowerByItem.setOnAction(actionEvent -> {
            UserOperationRoot.getChildren().clear();
            UserOperationRoot.getChildren().addAll(menuBar,backgroundView);
            queryFlower(UserOperationRoot);
      });
      Scene UserOperationScene = new Scene(UserOperationRoot, 800, 600);
      stage.setScene(UserOperationScene);
    }为什么点击售卖后菜单栏会消失

FishC 发表于 2024-1-5 15:27:40

qifenxian 发表于 2024-01-05 15:27
// 创建一般用户页面的方法
    private void create ...

在你的代码中,点击售卖后菜单栏消失的原因是因为你在`sellFlowerMenuItem.setOnAction()`方法中,先移除了`UserOperationRoot`中的所有子节点,然后再添加菜单栏和背景图像。这样相当于重新创建了一个新的`UserOperationRoot`,而新的`UserOperationRoot`只包含菜单栏和背景图像,其他的布局元素被清空了。

要解决这个问题,你可以修改代码,将菜单栏和背景图像放到布局的最前面,然后只移除布局中的特定元素即可。以下是修改后的代码示例:

sellFlowerMenuItem.setOnAction(actionEvent -> {
    // 清空布局中的特定元素
    flowerLayout1.getChildren().clear();
    // ... 其他需要清空的元素
    sellflower(UserOperationRoot);
});

queryFlowerByItem.setOnAction(actionEvent -> {
    // 清空布局中的特定元素
    flowerLayout2.getChildren().clear();
    // ... 其他需要清空的元素
    queryFlower(UserOperationRoot);
});

这样,每次点击售卖或查询时,只会清空布局中的特定元素,而保留菜单栏和背景图像。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

qifenxian 发表于 2024-1-5 20:03:47

FishC 发表于 2024-1-5 15:27
在你的代码中,点击售卖后菜单栏消失的原因是因为你在`sellFlowerMenuItem.setOnAction()`方法中,先移 ...

private void deleteFlower(Pane mangerOperationRoot) {
      
    }
生成代码,实现删除鲜花的功能,操作在页面上进行,并对数据库进行该行的删除

FishC 发表于 2024-1-5 20:05:10

qifenxian 发表于 2024-01-05 20:03
private void deleteFlower(Pane mangerOperationRoot ...

要实现删除鲜花的功能,你需要执行以下步骤:
1. 在数据库中删除相应的鲜花数据。
2. 在页面上进行删除操作,即从布局中移除对应的鲜花显示元素。

以下是一个示例代码,可以实现删除鲜花的功能:

private void deleteFlower(Pane mangerOperationRoot, String flowerId) {
    // 在数据库中删除对应的鲜花数据
    deleteFlowerFromDatabase(flowerId);

    // 从布局中移除对应的鲜花显示元素
    for (Node node : mangerOperationRoot.getChildren()) {
      if (node instanceof HBox) {
            HBox flowerLayout = (HBox) node;
            // 获取存储在 HBox 中的鲜花 ID
            String id = flowerLayout.getId().replace("flower_", "");
            if (id.equals(flowerId)) {
                mangerOperationRoot.getChildren().remove(flowerLayout);
                break;
            }
      }
    }
}

// 删除数据库中的鲜花数据的方法
private void deleteFlowerFromDatabase(String flowerId) {
    // 根据鲜花ID执行数据库删除操作
    // ...
}

上述代码中,`deleteFlower()`方法接收`Pane mangerOperationRoot`作为参数,用于访问管理页面的布局。同时,传入要删除的鲜花的ID `flowerId`。该方法首先调用`deleteFlowerFromDatabase()`方法,从数据库中删除对应的鲜花数据。然后,通过遍历布局中的子节点,找到对应的鲜花显示元素,并从布局中移除。在遍历过程中,通过比较鲜花的ID判断是否找到了要删除的鲜花元素。如果找到,调用`mangerOperationRoot.getChildren().remove(flowerLayout)`来移除该元素。

需要注意的是,示例代码中的删除数据库中的操作需要根据具体的数据库操作方式进行实现。你需要根据自己的数据库设置,在`deleteFlowerFromDatabase()`方法中执行相应的数据库删除操作。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

qifenxian 发表于 2024-1-5 23:32:05

FishC 发表于 2024-1-5 20:05
要实现删除鲜花的功能,你需要执行以下步骤:
1. 在数据库中删除相应的鲜花数据。
2. 在页面上进行删 ...

private void changeFlower(Pane mangerOperationRoot) {
      // 创建输入新的进价、售价、库存的文本框
      TextField idTexField = new TextField();
      TextField purchasePriceTextField = new TextField();
      TextField sellingPriceTextField = new TextField();
      TextField stockTextField = new TextField();

      // 创建确认按钮
      Button confirmButton = new Button("确认");
      confirmButton.setOnAction(event -> {
            String id = idTexField.getText();
            Flower flower = new Flower();
            flower = queryFlowerById(id);
            
            // 获取用户输入的新的进价、售价、库存等信息
            // Check if the text fields are not empty before updating
            if (!purchasePriceTextField.getText().isEmpty()) {
                int newPurchasePrice = Integer.parseInt(purchasePriceTextField.getText());
                // Update the new purchase price in the database using flowerId
                // Example: flowerService.updatePurchasePrice(flowerId, newPurchasePrice);
            }
            if (!sellingPriceTextField.getText().isEmpty()) {
                int newSellingPrice = Integer.parseInt(sellingPriceTextField.getText());
                // Update the new selling price in the database using flowerId
                // Example: flowerService.updateSellingPrice(flowerId, newSellingPrice);
            }
            if (!stockTextField.getText().isEmpty()) {
                int newStock = Integer.parseInt(stockTextField.getText());
                // Update the new stock in the database using flowerId
                // Example: flowerService.updateStock(flowerId, newStock);
            }
      });

      // 创建布局
      GridPane gridPane = new GridPane();
      gridPane.setPadding(new Insets(10));
      gridPane.setHgap(10);
      gridPane.setVgap(10);
// 将选择花名的下拉菜单和输入框添加到 gridPane 中
      gridPane.add(new Label("新的进价:"), 0, 1);
      gridPane.add(purchasePriceTextField, 1, 1);
      gridPane.add(new Label("新的售价:"), 0, 2);
      gridPane.add(sellingPriceTextField, 1, 2);
      gridPane.add(new Label("新的库存:"), 0, 3);
      gridPane.add(stockTextField, 1, 3);
      gridPane.add(confirmButton, 0, 4, 2, 1);

      // 设置gridPane的布局位置
      gridPane.setLayoutX(200);
      gridPane.setLayoutY(150);

      // 将gridPane添加到 mangerOperationRoot 中
      mangerOperationRoot.getChildren().add(gridPane);
    }
      修改代码,当queryFlowerById(id);完成后将鲜花的的信息打印在旁边,如果返回为空则提示用户无此id的鲜花

FishC 发表于 2024-1-5 23:32:34

qifenxian 发表于 2024-01-05 23:32
private void changeFlower(Pane mangerOperationRoot ...

你可以在`changeFlower()`方法中添加一个标签`Label`来显示查询到的鲜花信息。如果查询结果为空,可以设置标签显示提示信息。以下是修改后的代码示例:private void changeFlower(Pane mangerOperationRoot) {    // 创建输入新的进价、售价、库存的文本框    TextField idTextField = new TextField();    TextField purchasePriceTextField = new TextField();    TextField sellingPriceTextField = new TextField();    TextField stockTextField = new TextField();    // 创建确认按钮    Button confirmButton = new Button("确认");    Label flowerInfoLabel = new Label();// 显示查询到的鲜花信息    confirmButton.setOnAction(event -> {      String id = idTextField.getText();      Flower flower = queryFlowerById(id);      // 检查查询结果是否为空      if (flower != null) {            // 显示查询到的鲜花信息            flowerInfoLabel.setText("查询结果: ID-" + flower.getId() + " 花名-" + flower.getFlowername() + " 价格-" + flower.getPrice() + " 库存-" + flower.getStock());            // 获取用户输入的新进价、售价和库存信息            // 更新数据库中的相应字段            // ...      } else {            flowerInfoLabel.setText("无此ID的鲜花");      }    });    // 创建布局    GridPane gridPane = new GridPane();    gridPane.setPadding(new Insets(10));    gridPane.setHgap(10);    gridPane.setVgap(10);    // 将输入框和标签添加到 gridPane 中    gridPane.add(new Label("鲜花ID:"), 0, 0);    gridPane.add(idTextField, 1, 0);    gridPane.add(flowerInfoLabel, 2, 0, 2, 1);    gridPane.add(new Label("新的进价:"), 0, 1);    gridPane.add(purchasePriceTextField, 1, 1);    gridPane.add(new Label("新的售价:"), 0, 2);    gridPane.add(sellingPriceTextField, 1, 2);    gridPane.add(new Label("新的库存:"), 0, 3);    gridPane.add(stockTextField, 1, 3);    gridPane.add(confirmButton, 0, 4, 2, 1);    // 设置 gridPane 的布局位置    gridPane.setLayoutX(200);    gridPane.setLayoutY(150);    // 将 gridPane 添加到 mangerOperationRoot 中    mangerOperationRoot.getChildren().add(gridPane);}修改后的代码中,我添加了一个名为`flowerInfoLabel`的标签,用于显示查询到的鲜花信息。在点击确认按钮后,会调用`queryFlowerById(id)`方法查询鲜花信息,并根据查询结果设置`flowerInfoLabel`的文本内容。如果查询结果为空,即没有找到对应ID的鲜花,则提示用户"无此ID的鲜花"。你可以根据需要进一步完善和定制这段代码。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 1