2011-12-10 56 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:不客氣! –