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

JavaFX属性:重写getBean()方法?

印辉
2023-03-14

对象getBean()

返回包含此属性的对象。如果对象中不包含此属性,则返回null。

我注意到,在许多节点中,大多数(如果不是全部)属性都被定义为覆盖getbean()方法。当然,考虑到Javadoc中对getbean()的描述,这样做非常有意义。

ObjectProperty<MyClass> myObj = new SimpleObjectProperty<>();
public boolean isMagic() {
    return magic.get();
}

public BooleanProperty magicProperty() {
    return magic;
}

public BooleanProperty magic =
    new BooleanPropertyBase(false) {

    @Override protected void invalidated() {
        pseudoClassStateChanged(MAGIC_PSEUDO_CLASS. get());
    }

    @Override public Object getBean() {
        return MyControl.this;
    }

    @Override public String getName() {
        return "magic";
    }
};

private static final PseudoClass MAGIC_PSEUDO_CLASS = PseudoClass.getPseudoClass("xyzzy");
public boolean isMagic() {
    return magic.get();
}

public BooleanProperty magicProperty() {
    return magic;
}

public BooleanProperty magic =
    new SimpleBooleanPropertyBase(false) {

    @Override protected void invalidated() {
        super.invalidated();
        pseudoClassStateChanged(MAGIC_PSEUDO_CLASS. get());
    }
};

private static final PseudoClass MAGIC_PSEUDO_CLASS = PseudoClass.getPseudoClass("xyzzy");

或者一种更常见的方法,将无效侦听器添加到BooleanProperty中:

public BooleanProperty magic = new BooleanPropertyBase(false);
magic.addListener(observable -> pseudoClassStateChanged(MAGIC_PSEUDO_CLASS. magic.get());

Javadoc的编写方式表明这是正确的方法;如果你偏离了这种做法,你可能做得不对,你可能得不到想要的结果。

所以,这些是我的问题:

  1. 我们需要重写getBean()吗?
  2. 在什么情况下需要或应该重写它?
  3. 是否存在不能重写它的条件?

共有1个答案

邢飞白
2023-03-14

DR

  1. 不必重写getBean()。
  2. 如果需要信息,应重写它。
  3. 我不知道有任何情况,您不能重写它。

属性“bean”是关于属性的元信息,是可选的。(这同样适用于属性的“名称”。)无论您是否指定了名称和所属bean,属性的核心功能(获取和设置值、绑定、监听器)都将发挥作用。

但您可能希望在应用程序代码中使用此信息。例如,如果重用侦听器,则可以使用此信息标识事件的源。一般的库和工具也可以使用这些信息。例如,可以使用bean和name构建ScenicView(尽管我不知道它是如何真正实现的)。

没有必要重写抽象基类。所有SimpleProperty类都有允许您设置名称和bean的构造函数。

大多数内部属性重写抽象基类而不是实例化SimpleProperty的原因是内存占用较小。如果您只有几个对象中的几个属性,这并不重要,因为您只保存了几个字节。但是,如果您在数百甚至数千个节点中有几十个属性,并且尝试在有限的设备上运行,这样的事情就开始变得重要了。出于同样的原因,内部属性重写invalidated(),而不是附加侦听器。

 类似资料:
  • 主要内容:JavaFX属性的类型,读/可写属性,只读属性,JavaFX JavaBean,属性更改事件JavaFX属性存储控件的内部状态,并允许我们监听来自JavaFX UI控件的状态更改。JavaFX属性可以彼此绑定。绑定行为允许属性根据来自另一个属性的更改值来同步其值。 JavaFX属性的类型 有两种类型的JavaFX属性: 读写(Read/Writable) 只读(Read-Only) JavaFX的属性包含实际值,并提供更改支持,无效支持和绑定功能。所有JavaFX属性类都位于包命名空间

  • 问题内容: 因此,我试图找出最好的方法(以最少的代码量实现最优雅的方法)以允许重写python中某个属性的特定功能(例如,仅使用getter,仅使用setter等)。我喜欢下面的属性处理方式,因为它们的所有方法都封装在同一缩进的代码块中(更容易看到处理一个属性的函数在哪里停止,而处理一个属性的函数在哪里停止比较容易下一个开始): 但是,如果我想从以这种方式定义属性的类中继承,然后重写setter函

  • 我试图将Lombok与JavaFX属性结合使用: 这将为属性本身生成getter和setter: null getID():int 集合id(int id) GetIdProperty():SimpleIntegerProperty getName():string setName(字符串名称) GetNameProperty():SimpleStringProperty ... 这在龙目岛支持吗

  • 我的 Spring 启动应用程序中有两个数据源,因此我无法使用标准数据源。其中之一的定义如下: 上面yaml文件中定义的Hikari属性没有被考虑在内(可能是由于)。要求是使用默认的 Hikari 属性并覆盖上面定义的属性。请建议如何做到这一点。

  • 我在RestController类中有autowired ApplicationContext,因为我需要为收到的每个请求创建一个原型化的bean。 为了创建bean,我尝试了context.getBean(xx),但context没有列出getBean()方法。有没有一种方法,我可以在我的RestController类中获得原型类的bean。我正在以Spring Boot运行这个应用程序。 更新

  • 我有一个spring-boot应用程序。我有3个属性文件: jar外部的属性文件,位于Configurations/global.properties下的jar位置 jar外部的属性文件,位于Configurations/java.properties下的jar位置 问题是,我运行的是以下命令: 在我的application.properties中,我没有data.storesdb.lakeCon