2016-10-04 9 views
1

Я пытаюсь сделать так, чтобы оба квадрата отображались на JFrame, но только тот, который я делаю последним в основном методе apperas, а другой - нет. Попытались выяснить это сейчас около 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); 

} 
} 

ответ

2

Статические переменные принадлежит классы не объекты. Использование статических переменных для позиций «Враг» означает, что если вы создадите какие-либо экземпляры класса Enemy, они будут использовать одни и те же статические x, y. У вас есть 2 квадрата, но они всегда на высоте друг от друга.

Изменение public static int x, y; до public int x, y; должно решить вашу проблему.

+0

Большое спасибо! –