import javax.swing.*;
import java.awt.*;public class CanvasTest 
{
JFrame frame = new JFrame();
Canvas canvas = new Canvas();
void CanvasTest()
{
frame.setBounds(100, 100, 300, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
canvas.setBounds(0, 0, 200, 100);
frame.getContentPane().setLayout(null);
frame.getContentPane().add(canvas);
frame.setVisible(true);
}
void repaint()

Graphics g = canvas.getGraphics();
g.setColor(Color.BLACK); 
g.fillRect(0, 0, 100, 100);
}
public static void main(String[] args) throws InterruptedException
{
CanvasTest test = new CanvasTest();
Thread.currentThread().sleep(2000);/??????????
test.repaint();
}
}
如果不让线程暂停地话   画上地图形就只会闪烁一次  而不会停留在上面那?

解决方案 »

  1.   

    你应该创建Canvas的子类,在之类中覆盖父类的方法 void paint(Graphics g) 
    把你的repaint中的代码放到你自己写的void paint(Graphics g)方法中
      

  2.   

    代码如下
    import javax.swing.*;
    import java.awt.*;public class CanvasTest extends Canvas
    {
    JFrame frame = new JFrame();
     CanvasTest()
    {
    frame.setBounds(100, 100, 300, 200);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setBounds(0, 0, 200, 100);
    frame.getContentPane().setLayout(null);
    frame.getContentPane().add(this);
    frame.setVisible(true);
    }
    public void paint(Graphics g)

    g.setColor(Color.BLACK); 
    g.fillRect(0, 0, 100, 100);
    }
    public static void main(String[] args) throws InterruptedException
    {
    CanvasTest test = new CanvasTest();
    //Thread.currentThread().sleep(2000);//??????????
    //test.repaint();
    }