2013-01-02 61 views
0

我从来没有创建过GUI或者用Java绘制任何东西,我需要帮助绘制线条。在我的应用程序中,用户将被提供8个按钮,并且想法是当按下按钮时,应该在窗口上绘制与该按钮被按下时相对应的线。目前,我正在重写jpanel上的paintComponent函数,并且每125ms调用一次paint()函数(我只有240像素宽的范围可供绘制,并且我希望在该240px上保留30秒的值),但是它正在运行的硬件无法跟上,它看起来很糟糕/非常波涛汹涌。这里是我使用的代码:绘制线条的最佳方式java

jPanel1 = new javax.swing.JPanel() { 
    protected void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    Something cur = manager.getSomething(getCurrentState()); 
    for(int j=0; j<cur.getNumItems(); j++) { 
     Item i1 = cur.getItem(j); 
     for(int i = 0; i<i1.getLength(); i++) { 
     int start = i1.getStartTime(i); 
     int len = Math.max(0, (Math.min(i1.getStopTime(i), pix) - start)); 
     g.fillRect(start,j*22+5,len,5); 
     } 
    } 
    g.drawLine(pix, 0, pix, 170); 
    } 
}; 

其中: 的getItem(INT)将返回给定按钮的信息。 getStartTime(int)将返回按下按钮时的给定时间段的开始时间。 getStopTime(int)将返回按下按钮时的给定时间段的停止时间。 pix =我们在面板上的当前像素(因此,如果我们在时间轴的30秒内15秒,pix将等于120)

最后,我有一个计时器,每隔一段时间调用jpanel1.paint为125ms。

有没有更好的方法来做到这一点,或者有没有人有任何其他建议?请提供详细信息/来源,因为我没有任何真实的绘画体验。提前致谢!

+1

其中的代码,你没试过吗? –

+0

你可以请参阅本教程?我认为这是绰绰有余,如果你读了这么多:) http://beginwithjava.blogspot.in/2008/07/in-most-basic-graphics-app-we-had.html – Azzy

+0

“目前我是覆盖jpanel上的paintComponent函数,并每125ms调用一次函数“您不应该手动调用paintComponent'方法 –

回答

0

覆盖您的JPanel的功能的paintComponent手动

public void paintComponent(Graphics g) { 
     super.paintComponent(g) 

     g.drawLine(this.x1, this.y1, this.x2, this.y2); 
    } 
+0

他已经覆盖了这个方法(提到的问题) –

+0

正如vishal_aim所说,我已经做到了这一点,并且更新了我的帖子以显示我正在使用的代码。 – user1725940

0

你应该通话paintpaintComponent方法。

为了获得更好的效果,你可以尝试invalidate()每125ms的

后您的面板上repaint()方法后,您也可能有兴趣在repaint and invalidate