【问题标题】:How can I draw a line between 2 points in Graphics in Java?如何在 Java 中的 Graphics 中的 2 点之间画一条线?
【发布时间】:2022-02-25 01:41:23
【问题描述】:

我有这段代码,lista 是一个点的 ArrayList,每当界面的用户拖动鼠标时,我都会将其添加到列表中。但是当我这样做时,我收到一个错误:“AWT-EventQueue-0”java.lang.IndexOutOfBoundsException:索引 -1 超出长度 3 的范围

for(int i=0;i<lista.size();i++){
            g.fillOval(lista.get(i).x,lista.get(i).y,radio*2,radio*2); 
        if(lista.size()>1){
            g.drawLine(lista.get(i-1).x,lista.get(i-1).y,lista.get(i-2).x,lista.get(i-2).y);
        }
    }

我该如何解决这个问题?

【问题讨论】:

  • 为什么要使用“-1”和“-2”来改变索引值?这似乎意味着您想绘制从数组末尾到开头的点,在这种情况下,您的起始索引将是数组的末尾,并且每次迭代都会递减“i”。只需从头开始绘制,在这种情况下,您应该使用 "i" 和 "i + 1" 请参阅:stackoverflow.com/questions/65327201/… 以获得完整的工作示例。

标签: java netbeans graphics interface


【解决方案1】:

在您通过此循环的第一次迭代中,i-1 将是-1(而 i-2 将是-2)这就是您的问题所在

    for(int i=0;i<lista.size();i++){
            g.fillOval(lista.get(i).x,lista.get(i).y,radio*2,radio*2); 
        if(lista.size()>1){
            g.drawLine(lista.get(i-1).x,lista.get(i-1).y,lista.get(i-2).x,lista.get(i-2).y);
        }
    }

【讨论】:

  • 您的意思是将if(lista.size()&gt;1) 更改为if (i &gt; 1)
  • 是的,我已经通过添加它来修复它,大小可以大于 1,但是当再次调用该方法时,我从 0 开始,这就是我需要 i>0 的原因。 if(lista.size()&gt;1 &amp;&amp; i&gt;0).
  • @Angel 这就是为什么我需要... - 你不需要任何 if 语句。您所需要的只是一个正确编码的 for 循环。
猜你喜欢
  • 1970-01-01
  • 2020-12-14
  • 2020-02-16
  • 1970-01-01
  • 1970-01-01
  • 2014-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多