1

我想在我的 JComponent 周围创建阴影效果,尤其是在我的 JTextField 周围(JXTextField 因为我使用 SwingX api)。

我已经知道DropShadowBorderSwingX 的课程,但这并不是我想要实现的。我决定自己用圆角矩形和渐变来做。

我的想法是创建一个圆角矩形,对其应用渐变,然后使用给定的偏移量在该矩形顶部绘制组件以创建阴影效果。

问题是我只知道允许我指定渐变的起点和终点的 GradientPaint 类。除非我错了,否则我认为我无法实现这种渐变效果,我认为我需要一个从中心开始然后向边缘渐变的渐变。有没有办法用实际的 API 做这样的渐变,还是我需要自己写?

谢谢。

编辑:这是做一个看起来像这样的文本字段:在此处输入图像描述

底部的阴影比左右两侧的阴影更重要。

4

2 回答 2

2

没有简单的方法可以准确地实现您想要的。

要创建这种阴影的精确效果,您必须做几件事:

  1. 在单独的图像上绘制一个黑色/灰色(阴影的颜色)圆形矩形,该图像的大小与组件大小相加,并在两侧增加一些额外的间距
  2. 模糊该图像以从扁平圆角矩形创建阴影
  3. 通过使用您自己的 UI 或仅替换字段的 paintComponent 方法在字段下渲染该图像

让我再解释一下每个步骤:

  1. 您需要一个单独的图像,以便背景/组件不会与阴影一起模糊。另外,您不能将任何过滤器直接应用于图形 - 您需要一个图像。
  2. 你可以在这里阅读如何模糊的很好的解释:http ://www.jhlabs.com/ip/blurring.html
  3. 您需要在组件本身之前放置(绘制)阴影图像,这可以通过两种方式进行:将其绘制在包含该字段的面板/容器上或替换该字段的 paintComponent 方法或 UI 本身。
于 2012-09-06T09:23:04.067 回答
1

如果你需要径向渐变,有一个:RadialGradientPaint

http://docs.oracle.com/javase/6/docs/api/java/awt/RadialGradientPaint.html

(您在此处指定中心点和半径)

顺便说一句,DropShadowBorder 有什么问题?(它与您想要的非常相似,您可以随时获取源代码并对其进行修改)

于 2012-09-06T08:57:36.937 回答