Ссылка на класс метода JFrame Container.add - PullRequest
0 голосов
/ 01 марта 2019

Я наткнулся на простую игру PacMan, созданную каналом на YouTube под названием «Learn Coding from Scratch».В коде есть 3 файла классов: Player, Level1 и Executable.Это код Level1;

public class Level1 extends JPanel implements KeyListener{

    private JFrame window = new JFrame("PacMan");
    private ImageIcon background = new ImageIcon("images//background.jpeg");
    private Player player = new Player(5, 10, 10, "images//pacman_right.jpg", true, 0); 
    private int speed = 10;

    public Level1() {

        this.setFocusable(true);
        this.addKeyListener(this);
        **window.add(this);**

        window.setSize(940, 627);
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setVisible(true);
}
    public void paint(Graphics g) {
        g.drawImage(background.getImage(), 0, 0, null);
        player.drawPlayer(g);
    }

Что я не понимаю, так это "window.add (this)".Я никогда не видел примеров JPanel и JFrame, где вы должны ссылаться на текущий класс в JFrame.Вы просто добавляете кнопки, метки и т. Д. С ".add", а не в текущий класс?Кроме того, я проверил документы Oracle на метод Container.add, но в основном вы можете поместить туда все, что мне не сильно помогло.Не могли бы вы, ребята, взглянуть на это?Заранее спасибо.PS Я знаю, что большая часть кода, который я выложил, является избыточной, но кто-то все равно попросит весь код :)

1 Ответ

0 голосов
/ 01 марта 2019

Ваш класс Level1 extends JPanel.Это означает, что это JPanel.Объект с именем window является JFrame.Записав

window.add (this);

в конструкторе Level1, вы добавляете this JPanel в кадр.

Вы никогда не видели этого раньше, потому что наиболее распространенной практикой является extends JFrame, а затем создайте панели и добавьте их как: this.add(myPanel); //this refers to a frame, mypanel refers to a JPanel

Для того, чтобы сделать его болееясно, взгляните на самую распространенную практику и сравните с вашей:

public class PacmanFrame extends JFrame {
    public PacmanFrame() {
        //this refers to our class, extending JFrame
        JPanel myPanel = new JPanel();
        this.add(myPanel);
    }
}
...