#java #swing #render #paintcomponent
#java #swing #визуализация #paintcomponent
Вопрос:
Я пытаюсь сделать так, чтобы в JFrame отображались оба квадрата, но только тот, который я делаю последним в приложении main метода, а другой — нет. Я пытаюсь разобраться в этом уже около 3 часов и хочу разбить экран моего компьютера. Любая помощь была бы ПОТРЯСАЮЩЕЙ. Спасибо.
public class Main extends JFrame{
static Main main;
static Enemy square, square2;
Render render;
Main(){
render = new Render();
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(500,500);
setResizable(false);
add(render);
}
public void render(Graphics2D g){
square.render(g);
square2.render(g);
}
public static void main(String [] args){
main = new Main();
square2 = new Square(300,50);
square = new Square(50,50);
}
}
…..
public class Render extends JPanel {
public void paintComponent(Graphics g){
super.paintComponent(g);
Main.main.render((Graphics2D)g);
}
}
……
public class Enemy {
public static int x,y;
Enemy(int x, int y){
this.x = x;
this.y = y;
}
public void render(Graphics2D g){
}
}
…….
public class Square extends Enemy {
Square(int x, int y){
super(x,y);
}
public void render(Graphics2D g){
g.setColor(Color.red);
g.fillRect(x, y, 50, 50);
}
}
Ответ №1:
Статические переменные принадлежат классам, а не объектам. Использование статических переменных для вражеских позиций означает, что если вы создадите какие-либо экземпляры вражеского класса, они будут использовать одни и те же статические x, y. У вас есть 2 квадрата, но они всегда находятся друг над другом.
Изменение public static int x, y;
на public int x, y;
должно решить вашу проблему.
Комментарии:
1. Большое вам спасибо!!