java吧 关注:1,237,129贴子:12,705,915
  • 4回复贴,共1

java线画好后会自动消失,有解决办法吗

只看楼主收藏回复


用java做了个校园导航,就是查路径,大致思想是在图上取很多的结点,我一共取了165个结点,然后标记不同节点之间的权值,也就是不同节点之间的距离,然后用迪杰斯特拉方法找出最短路径和最短距离,最短路径是将结点序号保存在vector里,每一个结点序号对应一个坐标,然后将vector里的结点依次连接起来

这里可以看到画线的全过程,然而在画完线后整条线,也就是搜索到的整条路径就会消失,有没有什么办法可以让线不要消失

贴出画线的代码
shortpath是vector型,里面存的是最短路径经过的所有结点
point是个多行2列的数组,每一行的两个元素就是x坐标和y坐标,比如说point[5][0]就代表序号为5的结点的x坐标,point[5][1]就代表序号为5的结点的y坐标
public static Graphics g;
startX=point[(int) res.shortpath.get(0)][0];
startY=point[(int) res.shortpath.get(0)][1];
float width = 2.0f; // 设置需要的宽度
g = systemPictureLabel.getGraphics();
Graphics2D g2 = (Graphics2D)g ; //将Graphics的对象g转换为 Graphics2D对象
for (int i = 1; i < res.shortpath.size(); i++) //依次连接结点
{ number =(int) res.shortpath.get(i);
endX=point[number][0];
endY=point[number][1];
g2.setStroke( new BasicStroke( width ) ); //确定线条宽度
g2.setFont(new java.awt.Font("",java.awt.Font.TRUETYPE_FONT ,20));
g2.setColor(Color.red);
g2.drawLine(startX, startY,endX ,endY );
try
{
Thread.sleep(800);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
startX=endX;
startY=endY;
}


1楼2016-05-27 04:22回复
    顶一下


    来自iPhone客户端3楼2016-05-27 12:48
    回复
      你切换窗口的时候组件会重绘的。你需要重写paintComponent方法,在里面画线,而不是强行获得 graphics 对象来画


      IP属地:广东4楼2016-05-27 13:19
      收起回复