DrawRect в JPanel не отображается - PullRequest
       39

DrawRect в JPanel не отображается

1 голос
/ 11 декабря 2011

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

Я получил идею игры из [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 Ответ

2 голосов
/ 11 декабря 2011

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

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