2015-02-20 2 views
0

Я читаю код java tutorial по 2d игровому дизайну и наткнулся на это утверждение.Может ли новый экземпляр измерения быть инициализирован внутри использования метода, и если да, то почему?

setPreferredSize (новое измерение (B_WIDTH, B_HEIGHT))

Я не понимаю, как новый экземпляр измерения может быть инициализирован в использовании метода setPrefferedSize(). Я даже не уверен, использую ли я весь правильный лексикон, но если кто-то поймет, что я прошу помощи, это будет оценено =). Ниже приведен полный код

общественный класс Board расширяет JPanel {

private final int B_WIDTH = 350; 
private final int B_HEIGHT = 350; 
private final int INITIAL_X = -40; 
private final int INITIAL_Y = -40;  
private final int INITIAL_DELAY = 100; 
private final int PERIOD_INTERVAL = 25; 

private Image star; 
private Timer timer; 
private int x, y; 

public Board() { 


    initBoard();   
} 

private void loadImage() { 

    ImageIcon ii = new ImageIcon("star.png"); 
    star = ii.getImage();   
} 

private void initBoard() { 

    setBackground(Color.BLACK); 
    setPreferredSize(new Dimension(B_WIDTH, B_HEIGHT)); 
    setDoubleBuffered(true); 

    loadImage(); 

    x = INITIAL_X; 
    y = INITIAL_Y; 

    timer = new Timer(); 
    timer.scheduleAtFixedRate(new ScheduleTask(), 
      INITIAL_DELAY, PERIOD_INTERVAL);   
} 


@Override 
public void paintComponent(Graphics g) { 
    super.paintComponent(g); 

    drawStar(g); 
} 

private void drawStar(Graphics g) { 

    g.drawImage(star, x, y, this); 
    Toolkit.getDefaultToolkit().sync(); 
} 


private class ScheduleTask extends TimerTask { 

    @Override 
    public void run() { 
     x += 1; 
     y += 1; 

     if (y > B_HEIGHT) { 
      y = INITIAL_Y; 
      x = INITIAL_X; 
     } 

     repaint(); 
    } 
} 

}

+0

Вы можете инициализировать любой класс в методе, который принимает ссылку на этот класс ... тонны примеров в google. Что именно вы не понимаете по этому поводу? – chancea

ответ

0

Там нет ничего необычного. Вы могли бы написать

Размер d = новый размер (B_WIDTH, B_HEIGHT); setPreferredSize (d);

Это то же самое. Но поскольку вы не будете использовать его где-либо еще, это самый быстрый способ его написания.

0

При вызове метода, как:

setPreferredSize(new Dimension(B_WIDTH, B_HEIGHT)) 

первые аргументы оцениваются. В этом случае существует единственный аргумент - new Dimension(B_WIDTH, B_HEIGHT) - его оценка создает экземпляр Dimension.

Затем этот экземпляр затем передается методу setPreferredSize.

0

Результатом построения объекта является сам объект.

Dimension prefSize = new Dimension(B_WIDTH, B_HEIGHT); 

Объект может быть построен без присвоения его переменной, и результат по-прежнему является новым объектом.

new Dimension(B_WIDTH, B_HEIGHT); 

Хотя само по себе не является допустимым утверждением, потому что мы должны что-то делать с объектом. Передача его методу является действительным.

Автор мог бы написать ее как

Dimension prefSize = new Dimension(B_WIDTH, B_HEIGHT); 
setPreferredSize(prefSize); 

, но не было никакого смысла в промежуточном присвоении переменной, так как объект измерения создавался исключительно с целью установления, что предпочтительного размера одного компонента.

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