setsize不会立即调整大小

时间:2013-08-05 01:18:10

标签: java

我正在使用一个简单的棋盘程序,它工作正常,但它非常小。我尝试使用acm.graphics.setsize方法来调整窗口大小,但是在我放置图形对象之前它不会调整大小。我是否需要做一些事情来“刷新”程序的更改,以使其正常工作?

由于

/* File CheckerBoard.java
 * ----------------------
 * This program creates a checkerboard
 */

import acm.graphics.*;
import acm.program.*;

/* This class draws a checkerboard on the graphics window. 
 * The size of the checkerboard is determined by the
 * constants NROWS and NCOLUMNS, and the checkerboard fills
 * the verticle space available.
 */

public class CheckerBoard extends GraphicsProgram 
{
        /* Number of rows */
    private static final int NROWS = 8;

    /* Number of columns */
    private static final int NCOLUMNS = 8;

    // Window Size
    private static final int height = 1024;
    private static final int width = 1024;


    /* Runs the program */
    public void run() 
    {
        setSize(height,width);

        int sqSize = getHeight() / NROWS;
        for (int i = 0; i < NROWS; i++) 
        {
            for (int j = 0; j < NCOLUMNS; j++) 
            {
                int x = j * sqSize;
                int y = i * sqSize;
                GRect sq = new GRect (x, y, sqSize, sqSize);
                sq.setFilled(((i + j) % 2) != 0);
                add (sq);
            }
        }
    }
}

1 个答案:

答案 0 :(得分:4)

您需要致电validate()申请setSize()。否则,在为时已晚之后才会调用validate()validate()用于“验证”图形用户界面类中的某些操作,通常是在与初始化后的大小调整或重新定位相关时。

    setSize(height,width);
    validate();

但是,您应该使用您可以使用的init()方法设置applet,如果这样做,则无需致电{{1} }手动,例如:

validate()