Не могу добавить несколько графических компонентов в JFrame - PullRequest
0 голосов
/ 02 апреля 2019

Я пытаюсь создать простую 2d игру, и я новичок в программировании. Моя проблема в том, что я пытаюсь создать разные типы прямоугольников в разных классах и добавить их в мой JFrame. Я попытался возиться с добавлением их в JPanel, но тогда я не могу разместить прямоугольники по заданной координате. Компонент игрока является подвижным, а другой будет сплошной стеной, через которую игрок не сможет пройти (но то, что стена сплошная, сейчас не имеет значения). Поэтому мой вопрос заключается в том, как я могу добавить компонент баррикады и компонент игрока в JFrame и при этом иметь возможность назначать им позиции. Вот мой код:

Класс арены:

import javax.swing.*;

public class Arena {
public static void main(String args[]){
    JFrame f = new JFrame();
    Player s = new Player();
    Barricade x = new Barricade();
    f.add(x);
    f.add(s);
    f.setVisible(true);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setSize(1000, 1028);
    f.setResizable(false);
}
}

Класс игрока:

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.geom.Rectangle2D;
import javax.swing.*;

public class Player extends JPanel implements ActionListener, KeyListener{
Timer t = new Timer(5, this);
int x = 0, y = 0;



public Player() {
    t.start();
    addKeyListener(this);
    setFocusable(true);
    setFocusTraversalKeysEnabled(false);
}
public void paintComponent(Graphics g) {
    super.paintComponent(g);
    Graphics2D g2 = (Graphics2D) g;
    g2.fill(new Rectangle2D.Double(x * 100, y * 100, 100, 100));
    }

public void actionPerformed(ActionEvent e) {
    repaint();

}
public void up() {

    if (y == 0) {
    } else {
        y += -1;
        x += 0;
    }

}
public void down() {
    if(y == 9){}
    else{
        y += 1;
        x += 0;}
}
public void left() {
    if(x == 0){}
    else{
        y += 0;
        x += -1;}
}
public void right() {
    if(x == 9){}
    else{
        y += 0;
        x += 1;}
}


public void keyPressed(KeyEvent e) {
    int code = e.getKeyCode();
    if (code == KeyEvent.VK_UP) {
        up();
    }
    if (code == KeyEvent.VK_DOWN) {
        down();
    }
    if (code == KeyEvent.VK_RIGHT) {
        right();
    }
    if (code == KeyEvent.VK_LEFT) {
        left();
    }
}
public void keyTyped(KeyEvent e) {}
public void keyReleased(KeyEvent e) { }


}

Класс баррикады:

import javax.swing.*;
import java.awt.*;
import java.awt.geom.Rectangle2D;

public class Barricade extends JComponent {
private int x;
private int y;



public void paintComponent(Graphics g) {
    super.paintComponent(g);
    Graphics2D g2 = (Graphics2D) g;
    g2.setColor(Color.GREEN);
    g2.fill(new Rectangle2D.Double(500, 500, 100, 100));
}

}
...