2013-08-05 7 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

Смежные вопросы