MaterialFX floatingText属性异常:SceneBuilder正常IntelliJ运行显示异常
MaterialFX MFXTextField floatingText 运行时不显示问题
我在使用MaterialFX的MFXTextField组件时遇到了一个问题:设置的floatingText属性在程序运行后始终处于隐藏状态,但同样的FXML代码在SceneBuilder中预览时显示完全正常。
我的FXML代码如下:
<MFXTextField fx:id="username" floatMode="BORDER" floatingText="username" layoutX="10.0" layoutY="10.0" prefHeight="24.0" prefWidth="361.0"> <VBox.margin> <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" /> </VBox.margin> </MFXTextField>
场景差异:SceneBuilder预览时浮动文本正常显示,IntelliJ运行加载后浮动文本消失不见。
以下是几个可尝试的解决方案:
- 统一MaterialFX版本:SceneBuilder内置的MaterialFX版本可能和项目依赖的版本不一致,旧版本可能存在
floatMode="BORDER"的渲染bug。建议将项目依赖的MaterialFX升级到最新稳定版(如11.16.0及以上)。 - 确保样式表正确加载:MaterialFX组件需要依赖自带的CSS样式才能正常渲染浮动文本。可以在Application类中添加样式加载代码:
@Override public void start(Stage stage) throws Exception { Scene scene = new Scene(FXMLLoader.load(getClass().getResource("your-fxml-file.fxml"))); scene.getStylesheets().add(MaterialFXStylesheets.load("materialfx.css").toExternalForm()); stage.setScene(scene); stage.show(); } - 调整组件高度:当前设置的
prefHeight="24.0"高度过小,可能导致浮动文本没有足够的显示空间。尝试将prefHeight调整为30.0或更高,观察浮动文本是否正常显示。 - 手动触发浮动状态:如果上述方法无效,可以在控制器初始化时手动触发浮动文本的状态更新:
@FXML private MFXTextField username; @Override public void initialize(URL url, ResourceBundle resourceBundle) { // 通过焦点切换触发浮动文本更新 username.requestFocus(); username.getParent().requestFocus(); // 或者直接调用组件的状态更新方法 username.updateFloatingTextState(); }
内容的提问来源于stack exchange,提问作者Tushar
相关产品推荐
相关产品推荐

