2012-02-21 87 views
1

enter image description here如何更新Java swing背景圖紙?

enter image description here

正如你看到的這些畫面,菜單項關閉後不更新的背景網格線和黑色矩形。我如何更新它?在C#中有一個事件處理程序可以自動更新,但我是Java swing GUI應用程序的新手。

下面是代碼:

public void paint(Graphics g) { 

    super.paintComponents(g); 

    MainDisplayForm mD = new MainDisplayForm();   


    Graphics2D g2 = (Graphics2D) g; 

    g2.setColor(Color.BLACK); 
    int gridWidth = 1240; 
    int gridHeight = 400;  
    g2.fillRect(20, 50, gridWidth, gridHeight); 


    g2.setColor(Color.darkGray); 

    paintGrid(g2,gridWidth, gridHeight); 

    g2.setColor(Color.red); 
    Line2D line = new Line2D.Float(20, 50, 250, 260);    
    g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 
    //g2.draw(line); //pending  

    g2.dispose(); 

} 

private void paintGrid(Graphics g, int gridWidth, int gridHeight) 
{ 

    for(int i=20; i<gridWidth+20; i=i+10) 
    {  
     g.drawLine(i, 50, i, gridHeight+49);   
    }  

    for(int i=50; i<gridHeight+50; i=i+10) 
    {  
     g.drawLine(20, i, 1259, i);   
    }  
} 

//感謝評論!這是要添加的事件處理程序。 這必須添加到繪製在網格

private void jMenu2MenuDeselected(javax.swing.event.MenuEvent evt) { 
    repaint(); 
} 
+0

'MainDisplayForm mD = new MainDisplayForm();'這段代碼應該做什麼?通常,您不應該在'paint()'或'paintComponent()'方法中創建組件。什麼是「MainDisplayForm」?並重申camickr提到的,爲了更快地提供更好的幫助,請發佈[SSCCE](http://sscce.org/)。 – 2012-02-21 16:31:57

回答

1

當菜單關閉時調用重新打印到窗口。

請勿撥打paint(getGraphics())。而是調用repaint(),因爲這會通知超級組件它也需要重繪。

+0

是那個MenuCanceled(javax.swing.event.MenuEvent evt)? – user1098761 2012-02-21 16:25:36

+1

我從來沒有這個問題,但我想這將是和菜單接受或選擇的東西。你將不得不實現兩者所以它會重繪當它被取消,當菜單被關閉,因爲用戶選擇了一些東西。 – 2012-02-21 16:29:28

+0

好吧,我會盡快試用 – user1098761 2012-02-21 16:32:53

2

使用repaint()用於刷新每個菜單是項/更新組件。

何時使用repaint()

將某些組件添加到面板/框架或操縱某些組件後(例如,在Swing動畫中更改組件的位置/屬性時),請致電repaint(),它將爲您完成這項工作。實際上,它觸發調用組件的方法update()

+0

我已經嘗試過了,但它在矩形後面繪製了菜單項並再次繪製它。我在屏幕上創建了菜單和鼠標移動事件的事件處理程序,但我不知道我使用的事件處理程序不是您提到的那個。謝謝。 – user1098761 2012-02-21 16:21:48

+0

@ user1098761你試過了什麼?你可以添加一些代碼給你的文章,顯示你使用repaint()的地方嗎? – Juvanis 2012-02-21 16:26:26

+0

我曾嘗試過一些不同的事件處理程序。現在,它可以正常使用MenuDeselected(javax.swing.event.MenuEvent evt)。謝謝! – user1098761 2012-02-21 16:45:48

6

請勿重寫paint()並調用super.paintComponents()。

自定義繪畫是通過覆蓋JPanel(或JComponent)的paintComponent()方法,然後調用super.paintComponent()來完成的。

如果您需要更多幫助,請發佈您的SSCCE以證明問題。

+0

Thx評論!!! – user1098761 2012-02-21 16:32:41

+0

@ user1098761這不是任何形式的評論 – mKorbel 2012-02-21 16:45:49

+0

我試圖用repaint()調用super.paintComponents()。這也解決了一些眨眼問題。謝謝! – user1098761 2012-02-21 18:15:20