2

我正在使用一个简单的棋盘程序,它运行良好,但它非常小。我尝试使用 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);
            }
        }
    }
}
4

1 回答 1

4

您需要致电validate()申请setSize()。否则validate()不会被调用,直到为时已晚。validate()用于“验证”图形用户界面类中的某些操作,通常与调整大小或重新设置初始化后的样式有关。

    setSize(height,width);
    validate();

但是,您可能应该使用您可以使用的init()方法来设置小程序,如果您这样做,则不需要validate()手动调用,例如:

public void init() {
    setSize(height,width);
}

/* Runs the program */
public void run() 
{
    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);
        }
    }
}
于 2013-08-05T01:36:20.013 回答