Search code examples
javaswingpaint

What is the simplest way to draw in Java?


What is the simplest way to draw in Java?

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

public class Canvas
{
    private JFrame frame;    
    private Graphics2D graphic;
    private JPanel canvas;

    public Canvas()
    {
        frame = new JFrame("A title");
        canvas = new JPanel();
        frame.setContentPane(canvas);
        frame.pack();
        frame.setVisible(true);
    }

    public void paint(Graphics g){
        BufferedImage offImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        Grapics2D g2 = offImg.createGraphics();
        g2.setColor(new Color(255,0,0));
        g2.fillRect(10,10,200,50);
    }
}

This doesn't work and I have no idea how to get anything to appear.


Solution

  • Easiest way:

    public class Canvas extends JPanel {
    
        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            Graphics2D g2 = (Graphics2D) g;
            // painting code goes here.
        }
    }
    

    You simply need to extend JPanel and override the paintComponent method of the panel.

    I'd like to reiterate that you should not be overriding the paint method.

    Here is a very minimalistic example that works.

    public static void main(String[] args) {
        JFrame f = new JFrame();
        JPanel p = new JPanel() {
            @Override
            protected void paintComponent(Graphics g) {
                super.paintComponent(g);
                g.drawLine(0, 0, 100, 100);
            }
        };
        f.add(p);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
    }