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

标签 java javafx javafx-11

我正在使用 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/

    相关文章:

    java - 将Arquillian Test与Google App Engine(GAE)结合使用

    java - 添加了RestFB jar,但未找到FacebookClient符号

    javafx - 在 FXML 中为 TableView 设置 SelectionModel

    java - 从自定义数组列表创建一个新列表

    listview - JavaFx ListView用于聊天应用程序

    JavaFX:是否可以为整个 TreeView 设置背景颜色?

    java - IntelliJ IDEA - 错误 : JavaFX runtime components are missing, 是运行此应用程序所必需的

    java - 错误 : Hash of java. xml (...) 与 java.base 中记录的预期哈希 (...) 不同

    java - 使用 java11 构建和部署 javafx 应用程序

    java - 在 Sun JDK6 中可以使用 UseCMSCompactAtFullCollection 吗?