gpt4 book ai didi

java - 通过在 JavaFX 中单击按钮来删除按钮

转载 作者:行者123 更新时间:2023-12-04 10:15:41 25 4
gpt4 key购买 nike

我正在使用 JavaFX 构建一个日历/规划器应用程序。该应用程序由一个带有 35 (7x5) 个 VBox 的 GridPane 组成。在这些 VBox 中是 TaskButtons(在下面实现)。当我右键单击任务框时,它会将文本变为灰色,当我左键单击 TsskButton 时,我希望它删除按钮。我已经知道的事情。

  • AnchorPaneNode(扩展 VBox)没有静态 getChildren() 方法。
  • 我无法为 Pane 创建单独的实例变量,因为我不知道我将拥有多少。
  • getParent().getChildren() 不起作用,因为 getChildren() 的 parents 方法不可见。
  • VBox 有一个公共(public)的 getChildren(),但它不是静态的。
  • 我试图为 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;");
    }
    });
    }
    }

    最佳答案

    找到了我自己的问题的答案!
    对于那些遇到同样问题的人来说,这就是我为解决它所做的:

    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;");
    }
    });

    我需要访问 VBox 提供的公共(public) getChildren(),我通过将 (this)getParent() 转换为 VBox 来实现。从那里我能够 getChildren() 并删除“this”。

    关于java - 通过在 JavaFX 中单击按钮来删除按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61072703/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com