2011-12-10 57 views
1

我正在尝试创建一个简单的游戏,其中一个盒子(外星人)将在每一行(从左到右/从右到左)进行,然后向下并在鼠标单击时将出现一个球(火),当盒子和球碰到时,玩家就会赢得外星人入侵这个星球。JPanel中的DrawRect不显示

我得到了游戏的想法从 [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

什么盒子?没有盒子可以绘制?什么是“矩形组件”? –

+0

RectangleComponent是我的类,它应该通过drawRect绘制Box(Alien)..并且将被添加到JPanel ..但不幸的是它不显示框 – jko

+0

也许你应该显示RectangleComponent的代码。 –

回答

2

OK由于某种原因,现在我看到RectangleComponent代码,我看问题:

  • RectangleComponent扩展JComponent的,和一个JComponent的首选大小为[0,0],所以如果你不这样做任何关于此的事情,当然都不会显示。
  • 一个解决方案是给RectangleComponent一个getPreferredSize方法,告诉布局管理器它应该是多大。
  • 另一种可能的解决方案是对保存RectangleComponent对象的Space_GUI JPanel使用不同的布局管理器。例如,如果您使用了BorderLayout并添加了RectangleComponent BorderLayout.CENTER,那么RectangleComponent将填充Space_GUI JPanel。
  • 另一个问题是,你要小心地设置_xCoord和_yCoord变量,然后在move()中改变它们,但是这完全是因为你将它们设置为RectangleComponent的paintComponent方法中完全不同的东西。
+0

是啊!感谢:D。 – jko

+0

@jko:不客气! –