Java 是否可以设置窗格';控制器类内部的资源?
目前,当我想将翻译包设置到特定窗格时,我必须在加载之前进行设置。让我们考虑一个简单的例子: Bundle_en.属性Java 是否可以设置窗格';控制器类内部的资源?,java,javafx,javafx-2,Java,Javafx,Javafx 2,目前,当我想将翻译包设置到特定窗格时,我必须在加载之前进行设置。让我们考虑一个简单的例子: Bundle_en.属性 key=Sample Text MainApplication.java public class Main extends Application { @Override public void start(Stage primaryStage) throws Exception{ FXMLLoader fxmlLoader = new FX
key=Sample Text
MainApplication.java
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("sample.fxml"));
fxmlLoader.setResources(ResourceBundle.getBundle("bundles.Bundle",new Locale("en","EN")));
Parent root = fxmlLoader.load();
primaryStage.setTitle("Hello World");
primaryStage.setScene(new Scene(root, 300, 275));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
现在,我可以使用捆绑包内部的名称:
sample.fxml
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.control.Label?>
<GridPane fx:controller="sample.Controller"
xmlns:fx="http://javafx.com/fxml" alignment="center" hgap="10" vgap="10">
<Label text="%key"/>
</GridPane>
据我所知,在应用程序中有两种方法。从fxml文档: FXML文件的内容可以在读取文件时进行本地化。对于 例如,如果使用en_US语言环境加载FXML文件,则 基于以下内容为标签生成字符串“First Name” 资源字符串:
如果区域设置更改为fr\u fr并且重新加载FXML文件,则
标签上写着“Prénom”
另一方面,您可以更改java代码中的值:
Java代码的情况并非如此,因为必须手动更新
通过获取
引用它并调用适当的setter(例如
setText())
ResourceBundle也是Initializable接口中initialize方法的输入参数,在加载fxml文件时使用
所以我认为不可能在initialize方法中设置资源。稍后您可能会从控制器加载资源,并从java代码中使用它们。不确定它是否是大型应用程序的最佳解决方案
希望这会有所帮助。我建议使用构造并为每个自定义控件定义fxml和属性文件
如果您想遵循一些简单的命名约定,可以使用我编写的实用程序类来加载fxml文件:
import org.drombler.commons.fx.fxml.FXMLLoaders;
...
public class MyPane extends SomePane {
public MyPane() {
FXMLLoaders.loadRoot(this);
}
...
}
你可以在我的网站上了解更多
import org.drombler.commons.fx.fxml.FXMLLoaders;
...
public class MyPane extends SomePane {
public MyPane() {
FXMLLoaders.loadRoot(this);
}
...
}