解决g2.drawLine()方法的整数要求的方法

时间:2018-04-04 00:21:36

标签: java graphics jpanel

我正在尝试绘制一条线,无论用户如何调整JFrame的大小,都按比例保持线条相同。然而,我遇到的问题是当我尝试在用户使JFrame小于默认值时绘制一条线,因为我最终将坐标乘以小于1的分数,并且因为g2.drawLine()需要整数,所以将它们视为0并且不会绘制任何内容。我想知道是否有解决这个小问题的方法,或者你们有什么建议我应该如何改变我的逻辑。

2 个答案:

答案 0 :(得分:0)

我认为你所看到的只是因为整数除法。见Why is the result of 1/3 == 0?。当您有(width / 624)时,如果width小于624,则结果始终为0.

你可以:

  • 使用(width / 624.0),它以浮点(double)执行除法,或
  • 您可以将括号重新排列为例如(int) ((x * width) / 624))代替(int) (x * (width / 624))

但是,要直接回答这个问题,可以使用java.awt.geom.Line2D绘制一条浮点坐标线:

Line2D line2D = new Line2D.Double(x1, y1, x2, y2);
graphics2D.draw(line2D);

(另见https://docs.oracle.com/javase/tutorial/2d/geometry/primitives.html。)

答案 1 :(得分:0)

  

将坐标乘以1以下的分数,然后   g2.drawLine()需要整数,它们将它们视为0'

这显然是假的!如果坐标是327,那么将它乘以0.7得到228.9。这不是一个整数但是有整数部分,所以你可以安全地将它转换为整数:

double factor = ...;
int newCoord, oldCoord = ...;
newCoord = (int)(oldCoord * factor)

会给你圆润的结果。

其他错误......