2016-08-28 130 views
0

我目前正在嘗試創建一個非常簡單的遊戲,但我很快遇到了問題。它應該畫的盒子只是部分顯示。它似乎只能在有限的區域內顯示,但我不知道會導致這種情況或我如何解決它。JComponent僅部分顯示

public class Game 
{ 
    public static void main(String[] args) 
    { 
     Game game = new Game(); 
    } 

    public Game() 
    { 
    JFrame gameFrame = new JFrame(); 
    JPanel somePanel = new JPanel(); 
    Box testBox = new Box(10, 10, 20, 20); 
    somePanel.add(testBox); 
    gameFrame.add(somePanel); 
    gameFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    gameFrame.add(testBox); 
    gameFrame.setResizable(true); 
    gameFrame.setBounds(500, 500, 600, 350); 
    gameFrame.setVisible(true); 
    } 
} 

與主

public class Box extends JComponent 
{ 
    private int x; 
    private int y; 
    private int width; 
    private int height; 

    public Box(int x, int y, int width, int heigth) 
    { 
     this.x = x; 
     this.y = y; 
     this.width = width; 
     this.height = heigth; 
    } 

    public void paintComponent(Graphics g) 
    { 
     g.drawRect(x, y, width, height); 
    } 
} 

該類並且是類('nt)的繪製矩形。
注意:這是我第一次使用Stackoverflow,所以如果我做錯了什麼,請告訴我。

這裏是幀的圖像:

http://i.imgur.com/PT9Yg14.png

繪製延伸的JPanel似乎工作,這不是我想要的一類中,但至少它的工作原理。

+0

請正確格式化(縮進)您的代碼,併發佈一個完整的最小程序來重現問題。這段代碼不會編譯,如果我將g2d重命名爲g,那麼它工作正常(儘管somePanel是無用的,因爲您將該框添加到它,但是之後立即將其添加到框架本身)。另外,尊重Java命名約定。變量以小寫字母開頭。 –

+0

您正在添加兩個測試箱 - 一次添加到某個面板,一次添加到遊戲幀。 – Kylar

+0

@Kylar剛剛嘗試刪除該行,但似乎沒有任何改變。 – aulerelyn

回答

0

這是使用#2我第一次......

截圖應該包括這個問題,所以我們可以看到圖像,而不點擊它。作爲一名新用戶,我認爲您不包含圖片,但您可以將鏈接包含爲您問題的一部分。一般人會將圖像添加到您的問題中。

當Box組件直接添加到框架中時,該代碼適用於我。

您提供的圖像沒有任何意義。您繪製的線條的尺寸遠遠大於20像素,因此圖像看起來與您的發佈代碼相匹配。確保在執行發佈的代碼時生成圖像。

通常在做自定義繪畫時,您會覆蓋paintComponent(...)方法JPanel並調用super.paintComponent(...)作爲第一條語句。有關更多信息和示例,請參閱Custom Painting上的Swing教程部分。特別注意你如何覆蓋getPreferredSize()方法。如果你不這樣做,那麼佈局經理會認爲它的大小是(0,0),所以沒有東西可以繪製。

如果您沒有擴展JPanel,那麼您負責繪製JComponent的背景,因爲沒有完成默認繪畫。基本代碼可能類似於:

g.setColor(getBackground()); 
g.fillRect(0, 0, getWidth(), getHeight()); 
g.setColor(getForeground()); 
g.drawRect(...); 

另外,不要調用您的類Box。有一個Swing組件已經有了這個名字,所以它會變得混亂。類名應該更具描述性。