如何使用形状和渐变创建自定义的Java Swing GUI组件

3
我需要在我的JFrame上创建一个自定义组件,该组件将显示用户的存储状态,存储将以百分比形式呈现。
我需要创建类似于以下图片的内容:
https://istack.dev59.com/aB3R8.webp 我尝试使用自定义JLabel创建标签,然后从左到右着色该标签,但我无法创建云形状的标签,然后根据变量值填充该标签。
我应该如何做这个,什么是最好的方法?
有一次我想使用一系列图像来显示用户存储状态。
谢谢!

你的StorageStatus可以是静态的(如果发生了某些操作则会被标记)或动态的(基于某个计时器定期更新)。 - mKorbel
4个回答

5
我认为你需要使用图像遮罩(示例在这里这里),如果你想要精确复制那朵云。
该过程需要两张图片:
  • 云的轮廓(蓝色部分)
  • 一个图像掩码是云的形状,可能是黑色外部和白色内部
然后你需要执行绘制过程,每次存储量更改时都需要进行以下操作:
  1. 创建新的缓冲图像
  2. 以所需样式绘制绿色填充条(例如,如此图像中的倾斜)
  3. 将图像掩码复制到此处
  4. 绘制此新图像到屏幕上,并按此处描述应用掩码
  5. 将云轮廓图像绘制到屏幕上
这将花费大约一小时左右的时间才能完成,所以我不会为你做这件事。试试吧,如果你遇到问题(或者不理解我刚才描述的任何内容),那就具体提问。

3
您可以使用GlyphVector#getGlyphOutline()获取Unicode字符(如☁\u2601)的形状,并使用GradientPaint填充它。

2
您可以使用JLabel和从Icon派生的自定义实现类来完成此操作。

请问您能否在此处发布一段代码片段或者对您的回答进行一些详细说明,谢谢。 - Asghar
我想你应该知道如何在JLabel中显示图标。子类化一个图标,给它一个百分比属性并自己绘制它不应该太难,我猜。 - Joey

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接