swing Graphics Using the Graphics class


Example

Intro

The Graphics class allows you to draw onto java components such as a Jpanel, it can be used to draw strings, lines, shapes and images. This is done by overriding the paintComponent(Graphics g) method of the JComponent you are drawing on using the Graphics object received as argument to do the drawing:

class Board

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

public class Board extends JPanel{
    
    public Board() {
        setBackground(Color.WHITE);
    }

    @override
    public Dimension getPreferredSize() {
        return new Dimension(400, 400);
    }
    
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        // draws a line diagonally across the screen
        g.drawLine(0, 0, 400, 400);
        // draws a rectangle around "hello there!"
        g.drawRect(140, 180, 115, 25);
    }        
}

wrapper class DrawingCanvas

import javax.swing.*;

public class DrawingCanvas extends JFrame {
    
    public DrawingCanvas() {
        
        Board board = new Board();
        
        add(board); // adds the Board to our JFrame    
        pack(); // sets JFrame dimension to contain subcomponents
        
        setResizable(false);
        setTitle("Graphics Test");
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        
        setLocationRelativeTo(null); // centers window on screen
    }
    
    public static void main(String[] args) {
        DrawingCanvas canvas = new DrawingCanvas();
        canvas.setVisible(true);
    }
}

Colors

To draw shapes with different colors you must set the color of the Graphics object before each draw call using setColor:

g.setColor(Color.BLUE);  // draws a blue square
g.fillRect(10, 110, 100, 100);

g.setColor(Color.RED);  // draws a red circle
g.fillOval(10, 10, 100, 100);

g.setColor(Color.GREEN);  // draws a green triangle
int[] xPoints = {0, 200, 100};
int[] yPoints = {100, 100, 280};
g.fillPolygon(xPoints, yPoints, 3);