java - 解释一下paintComponent()和drawImage()的作用以及它们是如何做的?

标签 java paintcomponent drawimage

我正在剖析这个关于 2d 游戏的教程,但我不明白 paintComponent()drawImage() 方法在这段代码中做了什么以及为什么。有人可以解释一下吗?

public class Board extends JPanel  {

    private final int B_WIDTH = 350;
    private final int B_HEIGHT = 350;
    private final int INITIAL_X = -40;
    private final int INITIAL_Y = -40;    
    private final int INITIAL_DELAY = 100;
    private final int PERIOD_INTERVAL = 25;

    private Image star;
    private Timer timer;
    private int x, y;

    public Board() {


        initBoard();        
    }

    private void loadImage() {

        ImageIcon ii = new ImageIcon("star.png");
        star = ii.getImage();        
    }

    private void initBoard() {

        setBackground(Color.BLACK);
        setPreferredSize(new Dimension(B_WIDTH, B_HEIGHT));
        setDoubleBuffered(true);

        loadImage();

        x = INITIAL_X;
        y = INITIAL_Y;

        timer = new Timer();
        timer.scheduleAtFixedRate(new ScheduleTask(), 
                INITIAL_DELAY, PERIOD_INTERVAL);        
    }


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

        drawStar(g);
    }

    private void drawStar(Graphics g) {

        g.drawImage(star, x, y, this);
        Toolkit.getDefaultToolkit().sync();
    }


    private class ScheduleTask extends TimerTask {

        @Override
        public void run() {
            x += 1;
            y += 1;

            if (y > B_HEIGHT) {
                y = INITIAL_Y;
                x = INITIAL_X;
            }

            repaint();
        }
    }

最佳答案

以下是 AWT 和 Swing 中重绘操作的​​精彩总结:

Painting in AWT and Swing

您所询问的方法的具体信息在这里,但我会首先从更高级别的文章开始。

Graphics.drawImage javadoc

JComponent.paintComponent javadoc

关于java - 解释一下paintComponent()和drawImage()的作用以及它们是如何做的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28637353/

相关文章:

java - 更改绘画面板中的绘画图像

java - 具有一对多映射的 POST REST API : Cannot be null error

java - 将 svg 文件拖放到 Canvas 中

java - 我无法使用鼠标监听器(例如按下和释放)在 JLabel 中绘制多条线

java - 在图像上绘图

html - 如何避免 HTML Canvas 自动拉伸(stretch)

C++ WinApi 将图像.jpg 绘制到新窗口?

java - 将 Arquillian 持久性与无人机/ Graphite 烯结合使用

java - 在方法内部设置条件来查找素数不起作用

java - Java 中的 repaint() 不会立即返回 "re-paint"吗?