java使用double绘制矩形

java使用double绘制矩形,java,swing,Java,Swing,大家好,我有一段代码,可以在屏幕上打印一个正方形 g.fillRect(X,Y,squareSize,squareSize); 要得到我正在使用的正方形大小 int squareSize = (400/gridsize)-1; 其中gridsize可以是3-200之间的任意数字 然而,如果我超过130,squareSize总是1。有一个版本的 g.fillRect 使用双精度值而不是整数值的 因为如果它在130以上的任何值上四舍五入为1,那么正方形的大小都是相同的,而它们的大小应该根据不同

大家好,我有一段代码,可以在屏幕上打印一个正方形

g.fillRect(X,Y,squareSize,squareSize);
要得到我正在使用的正方形大小

int squareSize = (400/gridsize)-1;
其中
gridsize
可以是3-200之间的任意数字

然而,如果我超过130,
squareSize
总是1。有一个版本的

g.fillRect
使用双精度值而不是整数值的

因为如果它在130以上的任何值上四舍五入为1,那么正方形的大小都是相同的,而它们的大小应该根据不同而有所不同

所以这是一个视觉形式的问题

150乘150

200乘200

是否有使用双精度而不是整数值的
g.fillRect
版本

如果您阅读
java.awt.Graphics
的文档,则没有具有双参数的
fillRect

如果确实需要使用双值,可以使用
Rectangle2D
并使用
fill(shape)
方法填充此形状

double x = 0;
double y = 0;
double width = 100;
double height = 100;

Rectangle2D rect = new Rectangle2D.Double(x, y, width, height);

//java.awt.Graphics doesn't have fill(shape), so you need to cast it to Graphics2D
Graphics2D g2 = (Graphics2D) g;

g2.fill(rect); 
无论如何,如果您试图以亚像素精度绘制,则需要启用渲染提示。VALUE\u STROKE\u PURE。您可以这样启用它

g2.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE);

你如何想象双坐标代表一个像素?啊,好吧,我想我现在明白了…你可以看看
java.awt.Rectangle2D
为什么这个答案还不被接受?它就像一个符咒=)