Удалить кнопку, нажав на нее в JavaFX - PullRequest
2 голосов
/ 07 апреля 2020

Я создаю приложение Calander / Planner с использованием JavaFX. Приложение состоит из одного GridPane с 35 (7x5) VBox. Внутри этих VBox есть кнопки TaskButtons (реализовано ниже). Когда я щелкаю правой кнопкой мыши на TaskBox, он становится серым, а когда я щелкаю левой кнопкой мыши по TsskButton, я хочу удалить кнопку. Вещи, которые я уже знаю.

  1. AnchorPaneNode (расширяет VBox) не имеет метода stati c getChildren ().
  2. Я не могу создать отдельную переменную экземпляра для панели, поскольку я не будет знать, сколько у меня будет.
  3. getParent (). getChildren () не работает, потому что родительский метод getChildren () не виден.
  4. VBox имеет publi c getChildren (), но это не состояние c.
  5. Я пытался создать метод доступа stati c к getChildren (), но не смог.

Что еще я могу попытаться удалить эту кнопку при щелчке правой кнопкой мыши? Спасибо за вашу помощь!

public class TaskButton extends Button {

    protected int buttonNum = AnchorPaneNode.listIndex;
    public TaskButton(String str)
    {
        super(str);

        setStyle("-fx-background-color: transparent;");


        setOnMouseClicked(e -> {
            if(e.getButton() == MouseButton.SECONDARY) 
            {
                //I want to remove this button from the VBox, neither of these work
                AnchorPaneNode.getChildren().remove(this);
                //or
                getParent().getChildren().remove(this);
            }
            else if(e.getButton() == MouseButton.PRIMARY) 
            {
                setStyle("-fx-background-color: transparent; -fx-text-fill: #666666;");
            }           
        });
    }
}

1 Ответ

2 голосов
/ 07 апреля 2020

Нашел ответ на свой вопрос! Для тех, кто столкнулся с той же проблемой, это то, что я сделал, чтобы решить ее:

setOnMouseClicked(e -> {
    if (e.getButton() == MouseButton.SECONDARY) {
        //I want to remove this button from the VBox, neither of these work
        //AnchorPaneNode.getChildren().remove(this);
        //or
        VBox vbox = (VBox) getParent();
        vbox.getChildren().remove(this);
    } else if (e.getButton() == MouseButton.PRIMARY) {
        setStyle("-fx-background-color: transparent; -fx-text-fill: #666666;");
    }           
});

Мне нужен был доступ к publi c getChildren (), который предоставляет VBox, и я сделал это путем приведения (this) getParent () для VBox. Оттуда я смог получитьChildren () и удалить «this».

...