FXML 中的例項建立
以下類用於演示如何建立類的例項:
Version < JavaFX 8
由於 @NamedArg
註釋不可用,因此必須刪除 Person(@NamedArg("name") String name)
中的註釋。
package fxml.sample;
import javafx.beans.NamedArg;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
public class Person {
public static final Person JOHN = new Person("John");
public Person() {
System.out.println("Person()");
}
public Person(@NamedArg("name") String name) {
System.out.println("Person(String)");
this.name.set(name);
}
public Person(Person person) {
System.out.println("Person(Person)");
this.name.set(person.getName());
}
private final StringProperty name = new SimpleStringProperty();
public final String getName() {
System.out.println("getter");
return this.name.get();
}
public final void setName(String value) {
System.out.println("setter");
this.name.set(value);
}
public final StringProperty nameProperty() {
System.out.println("property getter");
return this.name;
}
public static Person valueOf(String value) {
System.out.println("valueOf");
return new Person(value);
}
public static Person createPerson() {
System.out.println("createPerson");
return new Person();
}
}
假設在載入 fxml 之前已經初始化了 Person
類。
關於匯入的說明
在下面的 fxml 示例中,將省略匯入部分。但是 fxml 應該從一開始
<?xml version="1.0" encoding="UTF-8"?>
然後是匯入部分,匯入 fxml 檔案中使用的所有類。這些匯入類似於非靜態匯入,但作為處理指令新增。甚至還需要匯入 java.lang
包中的類。
在這種情況下,應新增以下匯入:
<?import java.lang.*?>
<?import fxml.sample.Person?>
Version >= JavaFX 8
@NamedArg
帶註釋的建構函式
如果有一個建構函式,其中每個引數都使用 @NamedArg
註釋,並且 @NamedArg
註釋的所有值都存在於 fxml 中,則建構函式將與這些引數一起使用。
<Person name="John"/>
<Person xmlns:fx="http://javafx.com/fxml">
<name>
<String fx:value="John"/>
</name>
</Person>
如果載入,兩者都會導致以下控制檯輸出:
Person(String)
沒有 args 建構函式
如果沒有合適的 @NamedArg
帶註釋的建構函式,則將使用不帶引數的建構函式。
從建構函式中刪除 @NamedArg
註釋並嘗試載入。
<Person name="John"/>
這將使用沒有引數的建構函式。
輸出:
Person()
setter
fx:value
屬性
fx:value
屬性可用於將其值傳遞給 static
valueOf
方法,該方法採用 String
引數並返回要使用的例項。
例
<Person xmlns:fx="http://javafx.com/fxml" fx:value="John"/>
輸出:
valueOf
Person(String)
fx:factory
fx:factory
屬性允許使用不帶引數的任意 static
方法建立物件。
例
<Person xmlns:fx="http://javafx.com/fxml" fx:factory="createPerson">
<name>
<String fx:value="John"/>
</name>
</Person>
輸出:
createPerson
Person()
setter
<fx:copy>
使用 fx:copy
可以呼叫複製建構函式。指定另一個的 fx:id
標籤的 source
屬性將使用該物件作為引數呼叫複製建構函式。
例:
<ArrayList xmlns:fx="http://javafx.com/fxml">
<Person fx:id="p1" fx:constant="JOHN"/>
<fx:copy source="p1"/>
</ArrayList>
輸出
Person(Person)
getter
fx:constant
fx:constant
允許從 static final
欄位獲取值。
例
<Person xmlns:fx="http://javafx.com/fxml" fx:constant="JOHN"/>
不會產生任何輸出,因為這只是引用初始化類時建立的 JOHN
。