Zyphicx
Zyphicx

Reputation: 309

Java: Program doesn't save old graphics

So, I have been doing Java for a couple of months, and I'm now learing about Graphics. So, I am trying to make a paint kind of thing, where I can just draw with my mouse. Nothing really fancy, just something to get me started. The program just paints a small dot whenever I drag the mouse. It sort of works, except for the fact that it doesn't save my old dots. It just creates a new one! It would be kind if someone could help me with this problem:

Main class:

import javax.swing.JFrame;

public class Test{
    public static void main(String args[]){

        Ploofer ploof = new Ploofer();
        PumpkinPie f = new PumpkinPie(ploof);

        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setSize(1000,1000);
        f.setResizable(false);
        ploof.setSize(1000,1000);
        f.add(ploof);
        f.setVisible(true);
    }
}

"Ploofer" class:

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;

import javax.swing.JPanel;

public class Ploofer extends JPanel{

    PumpkinPie pObj = new PumpkinPie(this);

    @Override
    public void paintComponent(Graphics g){

        super.paintComponent(g);

        Graphics2D g2d = (Graphics2D) g;

        this.setBackground(Color.WHITE);

        g2d.setColor(new Color(190, 50, 0));

        if(pObj.draw==true){
            g2d.fillRect(pObj.x, pObj.y, 2, 2);
            pObj.draw = false;
        }
    }

    @Override
    public void update(Graphics g){
        paint(g);
    }

    //I tried to override update, but it didn't really help

}

"PumpkinPie" class:

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;

import javax.swing.JPanel;

public class Ploofer extends JPanel{

    PumpkinPie pObj = new PumpkinPie(this);

    @Override
    public void paintComponent(Graphics g){

        super.paintComponent(g);

        Graphics2D g2d = (Graphics2D) g;

        this.setBackground(Color.WHITE);

        g2d.setColor(new Color(190, 50, 0));
    /*  g2d.fillRect(475, 475, 50, 50);
        g2d.drawString("^Red^", 484, 540); */

        if(pObj.draw==true){
            g2d.fillRect(pObj.x, pObj.y, 2, 2);
            pObj.draw = false;
        }
    }

    @Override
    public void update(Graphics g){
        paint(g);
    }

    //I tried to override update, but it didn't really help

}

Upvotes: 1

Views: 68

Answers (1)

camickr
camickr

Reputation: 324128

It sort of works, except for the fact that it doesn't save my old dots. It just creates a new one!

Check out Custom Painting Approaches for the two common ways to do custom painting:

  1. add objects to paint to an ArrayList and iterate through the list to paint all objects
  2. draw to a BufferedImage and repaint the BufferedImage

In your case I would recommend approach 2.

//I tried to override update, but it didn't really help

Don't override update(). There is no reason to do that. That is an old AWT approach with is not needed in Swing.

Upvotes: 2

Related Questions