根据我的经验,标题中问题的答案是响亮的'NO !!!',我不能相信这是真的......但是根据我的经验。我已经创建了具有3种方法的各种属性类型接口,例如:getColor(),setColor(Paint c)和ObjectProperty colorProperty()。 get()/ set()方法在接口中使用default
修饰符实现。除了涉及Scene Builder和FXML的情况外,这通常可以正常工作。使用Scene Builder,上面的属性根本不显示,除非在实现接口的类中覆盖接口中的实现,这违背了使用默认方法的全部目的,...对吗?对于使用上述属性的FXML,仅为接口中实现的属性抛出PropertyNotFoundException
(没有上述覆盖)。
示例代码:
public interface TestInterface {
ObjectProperty<Paint> colorProperty();
default Paint getColor() {return colorProperty().get();}
default void setColor(Paint c) {colorProperty().set(c);}
}
public class TestClass implements TestInterface {
private ObjectProperty<Paint> color;
public ObjectProperty<Paint> colorProperty() {
if (color == null)
color = new SimpleObjectProperty<>(this, "color", Color.GREEN);
return color;
}
}
这是尝试运行测试应用程序生成的错误跟踪代码段,该应用程序包含一个试图设置名为'pressedColor'的属性的FXML文件,该属性的声明和实现方式与上面示例代码中的'color'相同:< / p>
javafx.fxml.LoadException:
...
Caused by: com.sun.javafx.fxml.PropertyNotFoundException: Property "pressedColor" does not exist or is read-only.
以下是来自FXML文件的违规片段:
<RectangleButton pressedColor="#ff6e6e">
感谢任何指导。谢谢!
答案 0 :(得分:0)
我创建了一个功能请求。也许将来会有这个问题的有效答案:https://bugs.java.com/bugdatabase/view_bug.do?bug_id=JDK-8259916