2014-11-22 73 views
0

this視頻drawing()方法在主類中調用。當我們在主要方法中刪除drawing()它仍然繪製形狀。我們如何避免這種情況?如何使用repaint調用java paintComponent

形狀類:

import java.awt.*; 
import javax.swing.*; 
public class shapes{ 
public static void main(String[] args){ 
    JFrame frame = new JFrame("Test"); 
    frame.setVisible(true); 
    frame.setSize(400,200); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    draw object = new draw(); 
    frame.add(object); 

    object.drawing(); 
    } 

} 

抽獎類:

import java.awt.*; 
import javax.swing.*; 

public class draw extends JPanel{ 
public void drawing(){ 
    repaint(); 
} 
public void paintComponent(){ 
    super.paintComponent(g); 
    g.setColor(Color.BLUE); 
    g.fillRect(10,15,100,100); 
    } 
} 
+0

我改變了帖子。 – TupcuFikret 2014-11-22 14:02:04

回答

2

沒有與代碼中的一些小問題,但我認爲這只是爲了演示一個小片段。有關詳細信息,請參閱Performing Custom Painting。 「操作系統」,只要組件有重繪

paintComponent方法將被自動調用:

事實上,本教程也將回答你的問題,而是要總結一下吧。致電repaint()只會告訴操作系統儘快再次致電paintComponent。因此,您可以撥打repaint()以確保您屏蔽的內容儘快顯示在屏幕上。

如果您明確要啓用/禁用某些繪畫操作,則不能通過阻止paintComponent被調用來影響此操作。它將被稱爲無論如何。相反,你會介紹一些標誌或狀態,指出是否應該繪製某些東西。

在你的榜樣,這可能大致就像這樣:

import java.awt.*; 
import javax.swing.*; 

public class Draw extends JPanel{ 
    private boolean paintRectangle = false; 

    void setPaintRectangle(boolean p) { 
     paintRectangle = p; 
     repaint(); 
    } 

    @Override 
    public void paintComponent(){ 
     super.paintComponent(g); 

     if (paintRectangle) { 
      g.setColor(Color.BLUE); 
      g.fillRect(10,15,100,100); 
     } 
    } 
} 

然後,您可以調用setPaintRectangle方法來指示矩形是否應該繪製與否。

+0

thank youuuuuuuuuuuuuuuuuu – TupcuFikret 2014-11-22 14:35:45

相關問題