gpt4 book ai didi

java - 如何在java中同时使用多个Paint组件

转载 作者:行者123 更新时间:2023-12-01 20:27:12 25 4
gpt4 key购买 nike

我正在用java制作一个GUI,它代表最长路径问题我正在使用Graphics 2D来绘制顶点以及它们之间的链接。我制作了一个按钮,用于计算两个顶点之间的最长路径,我想制作一个增长缓慢的链接,因此,我使用 Thread.sleep() 方法来实现这一点,但是当我使用它时,整个程序变得非常慢并且滞后。我已经重写了 PaintComponent 方法来绘制,并且无法使用多线程,因为这会导致 EDT(事件调度线程)出现问题。我看过有关“多个绘画组件”的其他主题,但没有任何帮助。有什么想法或帮助吗??

public void paintComponent(Graphics g)
{
super.paintComponent(g);
if(!dragging&&MainFrame.ActiveAddNode)
g.drawRect(X,Y, 20, 20);//Virtual rectangle for the vertex
p=new Polygon();
for(int i=0;i<Node.size();i++)
{
p.addPoint(Node.get(i).X+10, Node.get(i).Y+10);
g.setColor(Node.get(i).c);
g.fillRect(Node.get(i).X, Node.get(i).Y, 20, 20);//represents the graph vertex
g.setColor(Color.CYAN);
g.drawString(""+i, Node.get(i).X+7, Node.get(i).Y+15);//the number of the vertex

}
for(int i=0;i<Node.size();i++)
for(int j=0;j<Node.get(i).Children.size();j++){
g.setColor(Color.BLUE);
for(int k=0;k<link.size()-1;k++)
{
if(link.get(k)==i&&link.get(k+1)==Node.get(i).Children.get(j)){
g.setColor(Color.RED);//Highlight the Longest path link
}
}

g.drawLine(Node.get(i).X+10, Node.get(i).Y+10, Node.get(Node.get(i).Children.get(j)).X+10
, Node.get(Node.get(i).Children.get(j)).Y+10);
int Xsum=(Node.get(i).X+Node.get(Node.get(i).Children.get(j)).X)/2;
int Ysum=(Node.get(i).Y+Node.get(Node.get(i).Children.get(j)).Y)/2;
g.drawString(""+Node.get(i).Edges.get(j),Xsum,Ysum);

}//end of 2nd loop
}//end of paint component

最佳答案

I've used Thread.sleep()

当代码在事件调度线程 (EDT) 上执行时,请勿使用Thread.sleep(...)。这将阻止 GUI 自行绘制。

paintComponent(...) 方法的要点是绘制组件的当前状态。

因此,您需要一个允许您动态更改组件状态的方法。因此,也许您有一个类似以下的属性:setPathLength(...)。因此,一旦计算出最长路径,您就知道需要多少次迭代才能显示整个路径。

然后您需要使用计时器来安排您的动画。每次 Timer 触发时,您需要将“路径长度”增加 1,然后 repaint() 组件。所以每次都会多绘制一个节点。

阅读 Swing 教程中关于 How to Use Swing Timers 的部分了解更多信息。

关于java - 如何在java中同时使用多个Paint组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43699823/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com