如何在JavaFX控制器中为FXML带%的文本绑定资源包值?
解决JavaFX控制器中手动绑定资源包文本的问题
核心原因
FXML中的%key语法是FXMLLoader在加载时自动解析的,但直接调用Label.setText("%grocery")时,JavaFX不会自动识别并解析这个语法,只会把它当作普通字符串处理。
解决方案
方法1:直接从ResourceBundle获取值
在控制器中获取已加载的ResourceBundle,直接用键名获取对应文本:
@FXML private Label iconLabel; @Override public void initialize(URL url, ResourceBundle rb) { // 直接通过资源包的getString方法获取对应文本 iconLabel.setText(rb.getString("grocery")); }
如果主类加载FXML时需要手动传入资源包,可参考以下代码:
// 主类中加载FXML并传入资源包 ResourceBundle bundle = ResourceBundle.getBundle("your.package.name.Bundle"); FXMLLoader loader = new FXMLLoader(getClass().getResource("your.fxml"), bundle); Parent root = loader.load();
方法2:复用FXMLLoader的解析逻辑
如果想沿用%key的写法,可以调用FXMLLoader的解析工具方法:
import javafx.fxml.FXMLLoader; @FXML private Label iconLabel; @FXML private ResourceBundle resources; @Override public void initialize(URL url, ResourceBundle rb) { // 用FXMLLoader解析带%的字符串 String resolvedText = FXMLLoader.getValue("%grocery", resources); iconLabel.setText(resolvedText); }
验证资源包配置
确保资源包文件命名符合规范,且键名存在:
- 默认资源文件:
Bundle.properties(包含grocery=Market) - 本地化资源文件:如
Bundle_zh_CN.properties(包含grocery=超市)
内容的提问来源于stack exchange,提问作者Mhd Seif
相关产品推荐
相关产品推荐

