2013-08-05 61 views
2

我正在使用一個簡單的棋盤程序,它工作正常,但它非常小。我嘗試使用acm.graphics.setsize方法調整窗口大小,但直到放置圖形對象後才調整大小。我是否需要做一些事情來「沖洗」對程序的更改,使其正常工作?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); 
      } 
     } 
    } 
} 
+0

我注意到由於某種原因,有人提出這個問題-1。大家都知道,我一直在網上搜索,特別是在acm文檔中尋找這個看似基本問題的答案。 – cassius

回答

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); 
     } 
    } 
} 
+0

Y.O.U. F.R.E.A.K.I.N.巖。很多天我都在尋找這個簡單的答案?我將使用上面顯示的init方法,因爲我懷疑我會在某個時候進入init方法,但兩者的工作方式與廣告完全相同。謝謝!! – cassius

+0

@cassius只是一個提示,但如果我的答案解決了你的問題,接受它會是一件好事。 – Pandacoder

+0

我以爲我做到了。對不起 - 我點擊了向上箭頭,但沒有選中標記。再次感謝! – cassius

相關問題