JavaFX模态舞台圆角背景仍显白色,求助排查问题
JavaFX模态舞台圆角处白色背景问题修复
核心问题
你连续调用modalStage.initStyle(StageStyle.TRANSPARENT);和modalStage.initStyle(StageStyle.UNDECORATED);,后者会覆盖前者的透明样式,导致舞台底层的白色背景从圆角处透出。实际上StageStyle.TRANSPARENT已经包含了无装饰的特性,无需额外设置UNDECORATED。
修复后的Java代码
调整舞台样式设置逻辑,移除重复的initStyle调用:
Stage primaryStage = (Stage)((Node)(mouseEvent.getSource())).getScene().getWindow(); HashMapStage modalStage = new HashMapStage(); modalStage.initOwner(primaryStage); modalStage.initModality(Modality.APPLICATION_MODAL); modalStage.setOpacity(0.9); // 仅保留透明样式,已包含无装饰效果 modalStage.initStyle(StageStyle.TRANSPARENT); modalStage.setResizable(false); FXMLLoader fxmlLoader = new FXMLLoader(Run.class.getResource("creator-dialogue.fxml")); Scene creatorDialogue = new Scene(fxmlLoader.load(), 480, 720); creatorDialogue.setFill(Color.TRANSPARENT); modalStage.setScene(creatorDialogue); modalStage.centerOnScreen(); modalStage.showAndWait();
CSS样式检查
确保根AnchorPane的样式没有继承多余的背景设置,补充-fx-background-insets: 0避免默认内边距导致的背景溢出:
.foreground-pane { -fx-background-color: #737A83; -fx-background-radius: 20; -fx-border-radius: 20; -fx-background-insets: 0; }
额外验证项
- 确认
HashMapStage是Stage的直接子类,未重写initStyle等影响舞台样式的方法 - 临时移除
modalStage.setOpacity(0.9)测试,排除透明度渲染冲突,确认问题解决后再恢复
内容的提问来源于stack exchange,提问作者human0id
相关产品推荐
相关产品推荐

