我正在写一个自定义渲染的程序,并需要渲染带边框的矩形。我决定简单地调用graphics2D.fillRect(),切换到边框颜色,并调用graphics2D.drawRect()。但是,即使我使用相同的坐标和大小背靠背进行调用,但当我绘制的颜色是半透明(具有alpha)时,fillRect()并不总是填充drawRect包含的整个区域。此外,由fillRect()绘制的区域有时在drawRect()所包含的区域之外。为什么这两种方法在不同的地方绘制不同颜色的东西?Java的graphics2D fillRect不能正常工作与半透明的颜色
下面是一个演示问题的例子。点击窗口中的鼠标将在用alpha和不用绘制填充之间切换。请注意,当使用alpha绘图时,矩形底部有一行像素为白色,但在绘制不带alpha的绘图时,该行像素不在此处。
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.geom.AffineTransform;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class ColorWithAlpha extends JPanel {
private boolean hasAlpha = true;
p