簡體   English   中英

如何使用重畫來調用Java paintComponent

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM