[英]How to call java paintComponent using repaint
在此視頻中,在主類中調用了drawing()
方法。 當我們在main方法中刪除drawing()
,它仍會繪制形狀。 我們如何避免這種情況?
形狀類別:
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);
}
}
該代碼有一些小問題,但我認為這只是一小段用於演示目的。 有關詳細信息,請參見“ 執行自定義繪畫” 。
實際上,本教程也可以回答您的問題,但總結一下:
每當必須重新繪制組件時,都會自動“通過操作系統”調用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
方法以指示是否應繪制矩形。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.