Только один объект будет отображаться на экране

#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. Большое вам спасибо!!