You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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圆角外的区域透出白色背景,形成空白角。只需两步修改即可解决:

  1. 将PopupControl的背景设为透明
  2. 将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 12:22:38