日期:2014-05-20  浏览次数:20817 次

在Frame上画方格,但是每次运行的结果都不能全部显示出来
Java code

import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JFrame;


public class Test extends JFrame{
    private int height = 22;    //格子的长度
    private int width = 22;        //格子的宽度
    private int size = 20;   //每个格子的大小
    public Test(){
        this.setVisible(true);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setSize(height*size+10,width*size+35);
        Graphics g = this.getGraphics();
        g.setColor(Color.blue);
        for(int i=0;i<width;++i){
            for(int j=0;j<height;++j)
                g.fill3DRect(i*width, j*height, size, size, true);
        }
    }
    public static void main(String []args){
        new Test();
    }
}


不知道为什么每次只有一半能显示,,但是如果放在线程里面,让它一秒画一个,确实又是画上了的,,放在线程里面的话前2个格子又不会显示,,不知道为什么,,求助啊

------解决方案--------------------
JFrame不能用来画图的吧,画图什么的应该交给JComponent或它的子类JPanel来完成,一般要画的内容都是写在paintComponent(Graphics g)这个方法里面的

Java code

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

public class Test extends JFrame{
    public Test(){
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.add(new TestComponent());
        this.pack();
        this.setVisible(true);
    }
    public static void main(String []args){
        new Test();
    }
}

class TestComponent extends JPanel
{
    private int height = 22;    //格子的长度
    private int width = 22;        //格子的宽度
    private int size = 20;   //每个格子的大小
    
    public TestComponent()
    {
        this.setPreferredSize(new Dimension(height*size+10,width*size+35));    //为了让pack起作用
    }
    
    public void paintComponent(Graphics g)
    {
        g.setColor(Color.blue);
        for (int i = 0; i < width; i++)
        {
            for (int j = 0; j < height; j++)
            {
                g.fill3DRect(i * width, j * height, size, size, true);
            }
        }
    }
}