JavaFX PopupControl设置圆角出现空白角问题求助
解决JavaFX PopupControl圆角处空白的问题
问题描述
我尝试运行Stack Overflow帖子《如何为JavaFX PopupControl设置圆角》中的代码:
import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.PopupControl; import javafx.scene.layout.VBox; import javafx.stage.Stage; public class Main extends Application { @Override public void start(Stage stage) { PopupControl pu = new PopupControl(); VBox vb = new VBox(); vb.setPrefWidth(300); vb.setPrefHeight(200); vb.setStyle("-fx-background-color: rgba(17, 230, 120, 1.0); " + "-fx-background-radius: 10;"); Scene scene = new Scene(vb); pu.setScene(scene); stage.setWidth(600); stage.setHeight(500); stage.show(); pu.show(stage); } public static void main(String[] args) { launch(args); } }
运行后未得到预期效果,PopupControl的圆角处出现空白(如图:PopupControl圆角空白示意图),需要消除空白角,实现无白色的真实圆角。
环境信息
- Red Hat Enterprise Linux Server 7.6 (Maipo)
- GTK 3.14.15
- openjdk version "17.0.1"
- openjfx version "17.0.1"
解决方法
问题根源是默认状态下,PopupControl自身带有白色背景,同时Scene的默认填充也是白色,导致VBox圆角外的区域透出白色背景,形成空白角。只需两步修改即可解决:
- 将PopupControl的背景设为透明
- 将Scene的填充设为透明
修改后的完整代码如下:
import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.PopupControl; import javafx.scene.layout.VBox; import javafx.scene.paint.Color; import javafx.stage.Stage; public class Main extends Application { @Override public void start(Stage stage) { PopupControl pu = new PopupControl(); // 设置PopupControl背景透明 pu.setStyle("-fx-background-color: transparent;"); VBox vb = new VBox(); vb.setPrefWidth(300); vb.setPrefHeight(200); vb.setStyle("-fx-background-color: rgba(17, 230, 120, 1.0); " + "-fx-background-radius: 10;"); // 创建场景时指定透明填充 Scene scene = new Scene(vb, Color.TRANSPARENT); pu.setScene(scene); stage.setWidth(600); stage.setHeight(500); stage.show(); pu.show(stage); } public static void main(String[] args) { launch(args); } }
运行修改后的代码,PopupControl的圆角就会完全显示,不再有白色空白角。
内容的提问来源于stack exchange,提问作者Skartt
相关产品推荐
相关产品推荐

