fx:value
屬性只會解釋文字字符串,所以它將無法解析資源或表達式。恕我直言,這是設計中的缺陷。
我發現這個有點迂迴的解決方法。您可以創建你需要的資源的地圖,然後只用一個<fx:reference>
進入地圖的元素:
<fx:define>
<HashMap fx:id="rscBndl"
message="%category.message"
request="%category.request"
error="%category.error" />
</fx:define>
<ChoiceBox >
<items>
<FXCollections fx:factory="observableArrayList">
<fx:reference source="rscBndl.message" />
<fx:reference source="rscBndl.request" />
<fx:reference source="rscBndl.error" />
</FXCollections>
</items>
</ChoiceBox>
這裏有一個SSCCE:
ResourceTest.fxml:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.control.ChoiceBox?>
<?import javafx.collections.FXCollections?>
<?import java.lang.String ?>
<?import java.util.HashMap ?>
<BorderPane xmlns:fx="http://javafx.com/fxml/1">
<fx:define>
<HashMap fx:id="rscBndl"
message="%category.message"
request="%category.request"
error="%category.error" />
</fx:define>
<top>
<ChoiceBox >
<items>
<FXCollections fx:factory="observableArrayList">
<fx:reference source="rscBndl.message" />
<fx:reference source="rscBndl.request" />
<fx:reference source="rscBndl.error" />
</FXCollections>
</items>
</ChoiceBox>
</top>
</BorderPane>
resources.properties:
category.message = Message
category.request = Request
category.error = Error
ResourceTest.java
import java.io.IOException;
import java.util.ResourceBundle;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class ResourceTest extends Application {
@Override
public void start(Stage primaryStage) throws IOException {
ResourceBundle resources = ResourceBundle.getBundle("resources");
FXMLLoader loader = new FXMLLoader(getClass().getResource("ResourceTest.fxml"), resources);
Scene scene = new Scene(loader.load(), 600, 600);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
我覺得這是最近問了,雖然我現在不能找到它,而結論是,資源的分辨率不'FX工作:value'(可悲)。您可能必須在控制器中執行此操作。 –
嗯,好吧,也許我有一個解決方法... –