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.
To make something appear in paint(Graphics g) you need to call the drawing methods (like fillRect) on that Graphics. You are creating a bitmap and then drawing to the bitmap, not the screen.
Easiest way:
You simply need to extend
JPanel
and override thepaintComponent
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.
jjnguy already wrote how to do it right ... but here why it does not work in your example:
Here you have a class which does not relate in any way to Swing or AWT. (By the way, you may want to select another name to avoid confusion with
java.awt.Canvas
.)Here you are creating a new JPanel (for confusion also named
canvas
), and add it to the frame. Is is this panel'spaint
andpaintComponent
methods which are called when the system shows your frame.This paint method is never used at all (since it is not part of a component), and if it would be called, then you are only painting to some BufferedImage, not to the screen.