jjnguy уже написал, как это сделать правильно ... но вот почему это не работает в вашем примере:
import java.awt.*;
import javax.swing.*;
public class Canvas
Здесь у вас есть класс, который никак не относится к Swing или AWT,(Кстати, вы можете выбрать другое имя, чтобы избежать путаницы с java.awt.Canvas
.)
{
private JFrame frame;
private Graphics2D graphic;
private JPanel canvas;
public Canvas()
{
frame = new JFrame("A title");
canvas = new JPanel();
frame.setContentPane(canvas);
Здесь вы создаете новую JPanel (для путаницы также с именем canvas
) и добавляете еев кадр.Являются ли методы этой панели paint
и paintComponent
, которые вызываются, когда система показывает ваш кадр.
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);
}
Этот метод рисования никогда не используется вообще (так как он не является частью компонента),и если он будет вызван, то вы рисуете только для некоторого BufferedImage, а не для экрана.
}