ошибка Cannot invoke "javafx.scene.layout.AnchorPane.setVisible(boolean)" because "this.profile_pan" is null
public void createPaneBusket(String name, String price, String imagePath, String idproduct) {
if (isEnterProfile) {
String numericValue = price.replaceAll("[^0-9]", ""); // Удаляем все символы, кроме цифр
// Получаем URL-адрес ресурса из папки resources
URL imageUrl = getClass().getResource(imagePath);
URL imagePaneUrl = getClass().getResource("/com/my/app/app/icon/busket_pan.png");
URL deleteIconUrl = getClass().getResource("/com/my/app/app/icon/delete_icon.png");
Font font = Font.font("Comic Sans MS", FontWeight.BOLD, 14);
// Проверяем, найден ли ресурс
if (imageUrl == null && imagePaneUrl == null && deleteIconUrl == null) {
System.err.println("Resource not found: " + imagePath);
return;
}
AnchorPane pizzaPaneMain = new AnchorPane();
pizzaPaneMain.setPrefSize(380, 80);
// Создаем новый AnchorPane
ImageView pizzaPane = new ImageView(new Image(imagePaneUrl.toExternalForm()));
pizzaPane.prefWidth(380);
pizzaPane.prefHeight(80); // Устанавливаем размеры AnchorPane
// Создаем фото пиццы
ImageView pizzaImage = new ImageView(new Image(imageUrl.toExternalForm()));
pizzaImage.setFitWidth(75); // Устанавливаем ширину фото
pizzaImage.setFitHeight(75); // Устанавливаем высоту фото
AnchorPane.setTopAnchor(pizzaImage, 2.5); // Устанавливаем расположение фото
AnchorPane.setLeftAnchor(pizzaImage, 2.5);
// Создаем название пиццы
Label nameLabel = new Label(name);
nameLabel.setFont(font);
AnchorPane.setTopAnchor(nameLabel, 0.0); // Устанавливаем расположение названия
AnchorPane.setLeftAnchor(nameLabel, 110.0);
// Создаем цену пиццы
Label priceLabel = new Label(price);
priceLabel.setFont(font);
AnchorPane.setBottomAnchor(priceLabel, 0.0); // Устанавливаем расположение цены
AnchorPane.setLeftAnchor(priceLabel, 110.0);
ImageView deleteIcon = new ImageView(new Image(deleteIconUrl.toExternalForm()));
deleteIcon.setFitWidth(40); // Устанавливаем ширину значка удаления
deleteIcon.setFitHeight(40); // Устанавливаем высоту значка удаления
AnchorPane.setTopAnchor(deleteIcon, 35.0); // Устанавливаем расположение значка удаления
AnchorPane.setRightAnchor(deleteIcon, 10.0); // Устанавливаем расположение значка удаления
// Добавляем обработчик событий для удаления элемента при нажатии на значок удаления
deleteIcon.setOnMouseClicked(event -> {
// Удаление соответствующего элемента из VBox или другого контейнера, который содержит все элементы корзины
add_busket_vbox.getChildren().remove(pizzaPaneMain);
priceBusket -= Integer.parseInt(numericValue);
price_busket_label.setText(Integer.toString(priceBusket) + "₽");
// Также здесь можно добавить логику для обновления общей суммы заказа, если это необходимо
// Удаляем idproduct из строки productIds
productIds = productIds.replace(idproduct + ",", ""); // Заменяем id с запятой на пустую строку
productIds = productIds.replace(idproduct, ""); // Если idproduct находится в конце строки без запятой
});
// Добавляем элементы на AnchorPane
pizzaPaneMain.getChildren().addAll(pizzaPane, pizzaImage, nameLabel, priceLabel, deleteIcon);
// Добавляем AnchorPane в VBox
add_busket_vbox.getChildren().add(pizzaPaneMain);
priceBusket += Integer.parseInt(numericValue);
price_busket_label.setText(Integer.toString(priceBusket) + "₽");
productIds += idproduct + ","; // Добавляем idproduct с запятой к строке productIds
System.out.println(productIds);
} else {
profile_pan.setVisible(true);
}
}
Этот код находится в классе "Controller"
package com.my.app.app;
import javafx.geometry.Pos;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.StackPane;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
public class ProductItem extends AnchorPane {
private ImageView productImage;
private Label priceLabel;
private Button addToCartButton;
private Label nameLable;
public ProductItem(String imagePath, String price, String productId, String name) {
Controller controller = new Controller();
Image image = new Image(getClass().getResourceAsStream(imagePath));
productImage = new ImageView(image);
productImage.setFitWidth(100); // Установка ширины изображения
productImage.setFitHeight(100); // Установка высоты изображения
priceLabel = new Label(price + " ₽");
priceLabel.setFont(Font.font("Comic Sans MS", FontWeight.BOLD, 16)); // Установка шрифта и размера текста
nameLable = new Label(name);
nameLable.setFont(Font.font("Comic Sans MS", FontWeight.BOLD,13)); // Установка шрифта и размера текста
nameLable.setTranslateX(110);
addToCartButton = new Button("Добавить");
addToCartButton.setStyle("-fx-background-color: #7b5acf; -fx-text-fill: white; -fx-font-size: 16px; -fx-font-family: 'Comic Sans MS';");
addToCartButton.setOnAction(event -> {
controller.createPaneBusket(name,price,imagePath,productId);
});
// StackPane для размещения изображений и других элементов
StackPane stackPane = new StackPane();
stackPane.getChildren().addAll(productImage,nameLable, priceLabel, addToCartButton);
// Расположение элементов внутри StackPane
StackPane.setAlignment(productImage, Pos.TOP_LEFT);
StackPane.setAlignment(nameLable, Pos.TOP_LEFT);
StackPane.setAlignment(priceLabel, Pos.BOTTOM_CENTER);
StackPane.setAlignment(addToCartButton, Pos.BOTTOM_RIGHT);
// Добавление StackPane на AnchorPane
AnchorPane.setTopAnchor(stackPane, 0.0);
AnchorPane.setLeftAnchor(stackPane, 0.0);
AnchorPane.setRightAnchor(stackPane, 0.0);
AnchorPane.setBottomAnchor(stackPane, 0.0);
getChildren().add(stackPane);
}
private void addToCart(String productId) {
// Реализуйте добавление товара в корзину по его productId
}
}
При нажатии на кнопку:
addToCartButton.setOnAction(event -> {
controller.createPaneBusket(name,price,imagePath,productId);
});
Выскакивает ошибка:
Exception in thread "JavaFX Application Thread" java.lang.NullPointerException: Cannot invoke "javafx.scene.layout.AnchorPane.setVisible(boolean)" because "this.profile_pan" is null