java - 我可以创建 "complex"渐变来实现 swing(x) 组件上的阴影吗

标签 java swing gradient java-2d swingx

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

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

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

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

谢谢。

编辑:就是做一个看起来像这样的文本字段:enter image description here

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

最佳答案

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

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

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

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

  1. 您需要一张单独的图片,这样背景/组件才不会与阴影一起变得模糊。另外,您不能将任何过滤器直接应用于图形 - 您需要一个图像。
  2. 您可以在此处阅读有关如何模糊处理的详细说明:http://www.jhlabs.com/ip/blurring.html
  3. 您需要在组件本身之前放置(绘制)阴影图像,这可以通过两种方式实现:将其绘制在包含该字段的面板/容器上,或者替换该字段的 paintComponent 方法或 UI 本身。

关于java - 我可以创建 "complex"渐变来实现 swing(x) 组件上的阴影吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12296205/

相关文章:

java - 为什么我会收到 'ArrayIndexOutOfBoundsException' 错误?

java - IntelliJ 只编译文件一次

java.lang.NoSuchMethodError : org. hibernate.SessionFactory.openSession()Lorg/hibernate/Session;

java - 不知道如何使用 SetBorder

java swing 应用程序 - 如何设置面板中组件的高度(和宽度)

java - Spring Boot Hibernate高效事务管理

html - CSS渐变创建两种不同的颜色设计

java - 具有系统托盘上下文菜单的渐变背景

ios - 带圆角半径的渐变 UIButton 边框

java - Java有毕达哥拉斯定理吗?