首页  >  文章  >  Java  >  如何实现圆角矩形边框的透明角?

如何实现圆角矩形边框的透明角?

Patricia Arquette
Patricia Arquette原创
2024-11-07 14:35:03175浏览

How to Achieve Transparent Corners in a Rounded Rectangle Border?

带有圆角和透明度的边框:消除背景角

问题陈述:

查询围绕 TextBubbleBorder,一个为文本区域设计的自定义边框。但是,当使用边框创建圆角矩形(通过将指针大小设置为零)时,矩形外部的角保持不透明,显示默认面板颜色而不是所需的透明度。

解决方案概述:

实现边框角点透明的关键在于将父组件的背景色绘制在圆角矩形之外的区域。这涉及:

  1. 识别边界外部的区域(使用区域)。
  2. 创建排除该区域的剪切路径。
  3. 设置图形上下文的剪辑到剪切路径。
  4. 绘制父背景。
  5. 恢复原始剪辑。

修改代码:

TextBubbleBorder 类中的以下修改后的 PaintBorder 方法合并了上述步骤:

@Override
public void paintBorder(
        Component c,
        Graphics g,
        int x, int y,
        int width, int height) {

    Graphics2D g2 = (Graphics2D) g;

    // ... (unchanged code)

    // Paint the BG color of the parent, everywhere outside the clip
    // of the text bubble.
    Component parent  = c.getParent();
    if (parent!=null) {
        Color bg = parent.getBackground();
        Rectangle rect = new Rectangle(0,0,width, height);
        Area borderRegion = new Area(rect);
        borderRegion.subtract(area);
        g2.setClip(borderRegion);
        g2.setColor(bg);
        g2.fillRect(0, 0, width, height);
        g2.setClip(null);
    }

    // ... (unchanged code)
}

结果:

此修改有效地在外部区域中绘制父背景圆角,产生所需的透明边框。您现在可以创建一个带有透明边框的圆角矩形,与其父组件无缝集成。

以上是如何实现圆角矩形边框的透明角?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn