【问题标题】:Way to get around integer requirements of g2.drawLine() method绕过 g2.drawLine() 方法的整数要求的方法
【发布时间】:2018-04-04 00:21:35
【问题描述】:

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

【问题讨论】:

  • 仅供参考:当心重新发布您尚未得到答案的问题 - 这并不是真正鼓励的。我可能需要几天的时间才能得到您满意的答复
  • @MadProgrammer 这不是同一个问题 - 上一个问题是我不知道如何做到这一点,但这个问题是我尝试的一种实现方式遇到问题

标签: java graphics jpanel


【解决方案1】:

我认为您所看到的只是因为整数除法。见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。)

【讨论】:

    【解决方案2】:

    将坐标乘以小于 1 的分数,并且由于 g2.drawLine() 需要整数,它把它们当作 0's

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

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

    会给你四舍五入的结果。

    或者有什么问题……

    【讨论】:

      猜你喜欢
      • 2019-04-16
      • 1970-01-01
      • 1970-01-01
      • 2016-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-02
      相关资源
      最近更新 更多