gpt4 book ai didi

Java FXML 创建不扩展节点的自定义标签元素

转载 作者:行者123 更新时间:2023-12-02 08:52:48 24 4
gpt4 key购买 nike

我想为我的 fxml 文件创建一个自定义 tag/element 但我不希望强制继承该元素来自 PaneButtonTextField 等。是否有一些接口(interface)可以在我的自定义元素中实现,需要我实现 fx() 方法,该方法需要返回 Node/Region 元素应该在 Scene 中渲染。我的意思是 如果像下面这样的事情是可能的?

public class CustomElement implements SOME_FXML_INTERFACE {

private String myArg;

public CustomElement(@NamedArg("myArg") myArg) {
this.myArg = myArg;
}

// method that is required to be implemented by SOME_FXML_INTERFACE
// this method retuns some GUI element which actually needs to be rendered in the Scene
@Override
public Object fx() {
return new TextField(myArg);
}

}


<HBox>
<CustomElement myArg="some_argument"/>
</HBox>

所有这些都是为了让我可以拥有可以在构造函数中接受自定义参数的 CustomElement

最佳答案

您可以创建任意对象,但工厂对象只能由支持此功能的节点使用。 (从技术上讲,你可以这样做,但它需要使用 getter,每次调用它时都会返回一个新实例。)但是,你可以例如使用您的自定义类作为 ListViewcellFactory

如果您不需要依赖实例方法,但对static工厂方法感到满意,则可以使用fx:factory标签来指定方法创建节点实例,您不需要实现任何接口(interface)来执行此操作:

package my.package;

...

public class CustomElement {

public static Node fx() {
return new TextField(myArg);
}

}
<?import my.package.CustomElement?>
<?import javafx.scene.layout.HBox?>

<HBox xmlns:fx="http://javafx.com/fxml">
<children>
<CustomElement fx:factory="fx" />
</children>
</HBox>

更多信息请参阅 Introduction to FXML

顺便说一句:如果您的类有一个不带任何参数的 public 构造函数,您只需将具有该类名称的元素添加到 fxml 即可创建该类的实例。例如。以下 fxml 加载后会生成一个 ArrayList ;不过,您使用这些实例的方式是有限的;

<?import java.util.ArrayList?>

<ArrayList />

关于Java FXML 创建不扩展节点的自定义标签元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60675749/

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