Java中的阴影显示不正确
我正在尝试用Java创建一个类,它将向任何给定的UI元素添加一个简单的框阴影。通常情况下,它会正确显示,但是当它应用于按钮时,每次鼠标进入或退出按钮时,阴影都会变暗 绘制功能如下所示:Java中的阴影显示不正确,java,user-interface,Java,User Interface,我正在尝试用Java创建一个类,它将向任何给定的UI元素添加一个简单的框阴影。通常情况下,它会正确显示,但是当它应用于按钮时,每次鼠标进入或退出按钮时,阴影都会变暗 绘制功能如下所示: public void paint(Graphics g) { Rectangle bounds = g.getClipBounds(); g.setClip(bounds.x + (SHADOW_OFFSET + shadowOffsetMod) - (SHADOW_SIZE + shadow
public void paint(Graphics g)
{
Rectangle bounds = g.getClipBounds();
g.setClip(bounds.x + (SHADOW_OFFSET + shadowOffsetMod) - (SHADOW_SIZE + shadowSizeMod), bounds.y + (SHADOW_OFFSET + shadowOffsetMod) - (SHADOW_SIZE + shadowSizeMod),
bounds.width + 2 * (SHADOW_SIZE + shadowSizeMod), bounds.height + 2 * (SHADOW_SIZE + shadowSizeMod));
int red = UIConstants.SHADOW_COLOR.getRed();
int green = UIConstants.SHADOW_COLOR.getGreen();
int blue = UIConstants.SHADOW_COLOR.getBlue();
int alpha = UIConstants.SHADOW_COLOR.getAlpha();
for (int x = (SHADOW_OFFSET + shadowOffsetMod) - (SHADOW_SIZE + shadowSizeMod); x < bounds.width + (SHADOW_OFFSET + shadowOffsetMod) + (SHADOW_SIZE + shadowSizeMod); x++)
{
for (int y = (SHADOW_OFFSET + shadowOffsetMod) - (SHADOW_SIZE + shadowSizeMod); y < bounds.width + (SHADOW_OFFSET + shadowOffsetMod) + (SHADOW_SIZE + shadowSizeMod); y++)
{
int dx = Math.abs(x - Math.max(Math.min(x, bounds.width + (SHADOW_OFFSET + shadowOffsetMod)), (SHADOW_OFFSET + shadowOffsetMod)));
int dy = Math.abs(y - Math.max(Math.min(y, bounds.height + (SHADOW_OFFSET + shadowOffsetMod)), (SHADOW_OFFSET + shadowOffsetMod)));
float dist = (float) Math.sqrt(dx * dx + dy * dy);
dist /= (SHADOW_SIZE + shadowSizeMod);
if (dist > 1)
dist = 1;
dist = 1 - dist;
g.setColor(new Color(red, green, blue, ((float)alpha * dist) / 255));
g.fillRect(x, y, 1, 1);
}
}
g.setClip(bounds);
super.paint(g);
}
public void绘制(图形g)
{
矩形边界=g.getClipBounds();
g、 setClip(bounds.x+(SHADOW\u OFFSET+shadowOffsetMod)-(SHADOW\u SIZE+shadowSizeMod),bounds.y+(SHADOW\u OFFSET+shadowOffsetMod)-(SHADOW\u SIZE+shadowSizeMod),
bounds.width+2*(阴影大小+阴影大小),bounds.height+2*(阴影大小+阴影大小));
int red=UIConstants.SHADOW_COLOR.getRed();
int green=UIConstants.SHADOW_COLOR.getGreen();
int blue=UIConstants.SHADOW_COLOR.getBlue();
int alpha=UIConstants.SHADOW_COLOR.getAlpha();
对于(int x=(SHADOW\u OFFSET+shadowOffsetMod)-(SHADOW\u SIZE+shadowSizeMod);x1)
dist=1;
距离=1-距离;
g、 setColor(新颜色(红色、绿色、蓝色,((浮动)alpha*dist)/255));
g、 fillRect(x,y,1,1);
}
}
g、 setClip(边界);
超级油漆(g);
}
每次鼠标进入或退出按钮时,阴影都会变暗
不确定您的代码是如何使用的。但是(假设您使用的是usign Swing),这是由于使用具有透明度的背景色而导致的问题
Swing组件是
您的组件上是否有任何
mouseSteners
或MouseMotionListeners
鼠标侦听器?是的,我有鼠标侦听器,但禁用它们并不能解决问题。只有按钮被重新绘制,因此您在按钮周围的区域重复绘制,每次颜色变暗,但不会重置为原始颜色。您可能需要告诉父组件重新绘制/更新区域。