当前位置: 首页 > 知识库问答 >
问题:

JavaFX扩展按钮并通过fxml添加属性

杨景山
2023-03-14

我扩展了JavaFX按钮,如下所示:

public class ExtendedButton extends Button {
    private ObjectProperty<Enum> x;
    public final void setX(Enum value) {
        x.set(value); 
    }
    public final String getX() {
        return x.get()
    }
}

public enum MyEnum{
    A,
    B
}

现在我希望能够在我的FXML中使用它。大概是这样的:

<ExtendedButton fx:id="xButton" x=MyEnum.A />

我如何做到这一点。

共有1个答案

余靖
2023-03-14

您可以使用属性元素(而不是属性)以及fx:constant属性:

<ExtendedButton fx:id="xButton" >
    <x><MyEnum fx:constant="A" /></x>
</ExtendedButton>

这是一个SSCCE:

ExtendedButton.java

package application;

import javafx.beans.binding.Bindings;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.scene.control.Button;

public class ExtendedButton extends Button {

    public final ObjectProperty<Enum<?>> buttonState = new SimpleObjectProperty<>(ButtonState.NORMAL);

    public final ObjectProperty<Enum<?>> buttonStateProperty() {
        return this.buttonState;
    }


    public final Enum<?> getButtonState() {
        return this.buttonStateProperty().get();
    }


    public final void setButtonState(final Enum<?> buttonState) {
        this.buttonStateProperty().set(buttonState);
    }

    public ExtendedButton() {
        super();
        styleProperty().bind(Bindings.
                when(buttonState.isEqualTo(ButtonState.CRITICAL)).
                then("-fx-base: red;").
                otherwise(""));


    }

}

按钮tate.java:

package application;

public enum ButtonState { NORMAL, CRITICAL }

ExtendedButtonTest.fxml:

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.layout.StackPane?>
<?import application.ExtendedButton?>
<?import application.ButtonState?>
<?import javafx.geometry.Insets?>

<StackPane xmlns:fx="http://javafx.com/fxml/1">
    <padding>
        <Insets top="20" right="20" bottom="20" left="20"/>
    </padding>
    <ExtendedButton text="Test" >
        <buttonState>
            <ButtonState fx:constant="CRITICAL"/>
        </buttonState>
    </ExtendedButton>
</StackPane>

ExtendedButtonTest.java:

package application;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class ExtendedButtonTest extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {
        Parent root = FXMLLoader.load(getClass().getResource("ExtendedButtonTest.fxml"));
        primaryStage.setScene(new Scene(root));
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
 类似资料:
  • 寻找语法添加一个与键- 等

  • 你能帮我解决这个问题吗? 我在类<code>单元格</code>中创建按钮,并向该按钮添加一些默认操作。 在< code>Game类中,我想给这个按钮添加额外的动作,但我也想保留默认动作。 我知道新操作覆盖了以前的操作。因此,如果我单击按钮,它只会打印。 是否可以向按钮添加新操作并保留以前的连接?

  • 我的第一个帖子,请温柔点。 我正在为一个简单的游戏制作一个JavaFX图形用户界面。我有一个FXML布局加载通过FXML文件加载器在这里: 然后我在Main.java创建一个按钮: 以及为了显示: 问题:我究竟如何将FXML布局和普通java按钮对象组合在同一场景中?它像苹果和桔子一样,不可能结合吗?我的IDE不允许我调用java文档中推荐的方法: 等等 请帮我和/或给我指个方向,我真的试过了。。

  • 我正在使用JavaFX构建一个calander/planner应用程序。该应用程序包括一个单一的GridPane与35(7x5)VBox的。在这些VBox中有任务按钮(在下面实现)。当我右键单击任务框时,它将把文本变成灰色,当我左键单击TsskButton时,我希望它删除按钮。我已经知道的事情。 AnchorPaneNode(扩展VBox)没有静态getChildren()方法 我无法为窗格创建单

  • 这是我的代码: 这是我放置在V和H框中的自定义框节点元素 错误:粉色是框,灰色是StackPane的背景颜色,用于视觉测试。 我想做的是: 我想要的是:我想要CustomBox中的矩形(以及稍后添加的其他组件)填充它们所在的StackPane的大小,并在调整窗口大小时改变它们的大小。我基本上想让它们模仿那个窗格的大小。 现在试着解释一下发生了什么,基本上我有一个基本上是正方形的类(稍后会有更多的东

  • 我有一个有几个按钮的工具栏。我想要几个按钮来加载不同的FXML文件。现在的方法是用Java代码编写fxml文件,并在每次调用时插入它。如果我可以调用FXML文件并获得正确的场景,这将是一个更好的选择。这是我加载设置视图的示例: 我以前使用过tabpane,它的便利之处在于它可以加载“内容”,在某种程度上,它是一个actionlistener,可以加载fxml文件。我希望工具栏按钮具有此功能。 我们