Java “我可以创建”吗;复杂的;渐变以实现swing(x)组件上的阴影

Java “我可以创建”吗;复杂的;渐变以实现swing(x)组件上的阴影,java,swing,gradient,java-2d,swingx,Java,Swing,Gradient,Java 2d,Swingx,我想在我的JComponent周围,特别是JTextField周围创建阴影效果(因为我使用了SwingXAPI,所以jxtfield) 我已经知道SwingX中的DropShadowBorder类,但这并不是我想要实现的。我决定自己用圆角矩形和渐变来做 我的想法是创建一个圆角矩形,对其应用渐变,然后在该矩形顶部绘制具有给定偏移量的组件,以创建阴影效果 问题是我只知道GradientPaint类允许我指定渐变的起点和终点。除非我错了,否则我想我无法达到这样的效果,这种梯度,我想我需要一个从中心开始

我想在我的JComponent周围,特别是JTextField周围创建阴影效果(因为我使用了SwingXAPI,所以jxtfield)

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

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

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

谢谢

编辑:是要创建一个如下所示的文本字段:


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

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

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


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

要完全实现您想要的,没有简单的方法

要创建这种阴影的精确效果,您必须执行以下几项操作:

  • 在一个单独的图像上绘制一个黑色/灰色(阴影的颜色)圆形矩形,该图像的大小为组件的大小加上侧面的一些额外间距
  • 模糊该图像以从平面圆形矩形创建阴影
  • 通过使用自己的UI或仅替换字段的paintComponent方法在字段下渲染该图像
  • 让我详细解释一下每一步:

  • 您需要一个单独的图像,以便背景/组件不会与阴影一起变得模糊。另外,您不能直接将任何过滤器应用于图形-您需要图像
  • 您可以在此处阅读有关如何模糊的详细说明:
  • 您需要在组件本身之前放置(绘制)阴影图像,这有两种可能:在包含字段的面板/容器上绘制阴影图像,或者替换字段paintComponent方法或UI本身

  • 我已经看到了代码,我不喜欢它在不够灵活的地方制作,因为我希望在盒子的不同侧面有不同的阴影强度。这就是修改部分的作用。为每一面增加不同的强度似乎是一个简单的改变。你也可以看看SwingX中的ShadowRenderer类,我会通读一遍,除了出色的工作之外,他对渐变做了很多工作。还有一些基于paintBorder或Border的阴影效果代码