2011-12-10 5 views
1

Я пытаюсь создать простую игру, в которой поле (инопланетянин) происходит в каждой строке (слева направо/справа налево), затем идет вниз и щелчком мыши будет мяч (огонь), и когда поле и мяч встречаются, игрок выигрывает, иначе инопланетянин вторгается на планету.DrawRect в JPanel, не показывающем

У меня есть идея игры от [http://www.stanford.edu/class/cs106a/cgi-bin/classhandouts/23-ufo-game.pdf][1] Стэнфорд лекции [ 1]:

, поэтому я попытался сделать так, используя мой код.

package spaceInvader; 

import javax.swing.JFrame; 

public class Main { 
public static void main(String args[]) throws InterruptedException{ 
    JFrame jf = new JFrame("YY"); 
    Space_GUI sg = new Space_GUI(); 
    jf.add(sg); 
    jf.setSize(500,500); 
    jf.setVisible(true); 
    jf.setContentPane(sg); 
    Thread.sleep(2000); 
    sg.rc.move(); 

} 
} 




package spaceInvader; 

import javax.swing.JButton; 
import javax.swing.JPanel; 

public class Space_GUI extends JPanel{ 
    public RectangleComponent rc; 

public Space_GUI(){ 
    rc = new RectangleComponent(); 
    add(rc);  
} 

} 




package spaceInvader; 

import java.awt.Color; 
import java.awt.Graphics; 

import javax.swing.JComponent; 

public class RectangleComponent extends JComponent{ 

    private int _xCoord; 
    private int _yCoord; 
    private static final int SIZE = 50; 
    public RectangleComponent(){ 
     _xCoord = 10; 
     _yCoord = 10; 
     repaint(); 
    } 

    public void move(){ 
     _xCoord = 20; 
     _yCoord = 20; 
     repaint(); 
    } 
    public void paintComponent(Graphics g){ 
     _xCoord = getWidth()/2; 
     _yCoord = getHeight()/2; 
     super.paintComponent(g); 
     g.setColor(Color.black); 
     g.drawRect(_xCoord, _yCoord, SIZE, SIZE); 
     g.fillRect(_xCoord, _yCoord, SIZE, SIZE); 
    } 
} 

В моем коде я пытаюсь просто показать окно, но затем нет показов. Я попытался добавить JButton, и только эта кнопка показывает, он не показывает окно.

+0

Какая коробка? Нет коробки для рисования? Что такое «RectangleComponent»? –

+0

RectangleComponent - это мой класс, который должен рисовать Box (Alien) от drawRect .. и будет добавлен в JPanel .. но, к сожалению, он не показывает поле – jko

+0

, возможно, вам следует показать код для RectangleComponent. –

ответ

2

ОК по какой-то причине я вижу код RectangleComponent сейчас, и я вижу проблемы:

  • RectangleComponent расширяет JComponent и PreferredSize JComponent является [0, 0], так что если вы не делаете ничего об этом, конечно, ничего не скажешь.
  • Одним из решений является предоставление RectangleComponent метода getPreferredSize, который сообщает менеджерам макетов, какой размер он должен быть.
  • Другим возможным решением является использование другого менеджера макетов для Space_GUI JPanel, который содержит объект RectangleComponent. Например, если вы использовали BorderLayout и добавили RectangleComponent BorderLayout.CENTER, то RectangleComponent заполнит Space_GUI JPanel.
  • Другая проблема заключается в том, что вы стараетесь установить переменные _xCoord и _yCoord и затем изменить их в move(), но это все напрасно, поскольку вы установили их в нечто совершенно другое в методе paintComponent RectangleComponent.
+0

Да! Спасибо д. – jko

+0

@jko: добро пожаловать! –

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

  • Нет связанных вопросов^_^