2013-01-02 130 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