JPRnel中没有显示的DrawRect

时间:2011-12-10 20:05:23

标签: java swing graphics graphics2d paintcomponent

我正在尝试创建一个简单的游戏,其中一个盒子(外星人)正在每一行(从左到右/从右到左),然后向下,在鼠标点击中将有一个球(火),当盒子和球相遇,玩家赢得其他外星人入侵行星。

我从中得到了游戏的想法 [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,只有那个按钮显示,它没有显示框。

1 个答案:

答案 0 :(得分:2)

好的,出于某种原因,我现在看到了RectangleComponent代码,我看到了问题:

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