【问题标题】:Only one object will Render to Screen只有一个对象会渲染到屏幕
【发布时间】:2017-02-12 07:33:52
【问题描述】:

我正在尝试让两个方块都出现在 JFrame 上,但只有我在主方法中最后制作的一个,而另一个没有。已经尝试解决这个问题大约 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);

}
}

【问题讨论】:

    标签: java swing render paintcomponent


    【解决方案1】:

    静态变量属于类而不是对象。 对 Enemy 位置使用静态变量意味着,如果您创建 Enemy 类的任何实例,它们将共享相同的静态 x、y。你有 2 个正方形,但它们总是在彼此之上。

    public static int x, y; 更改为public int x, y; 应该可以解决您的问题。

    【讨论】:

    • 非常感谢!!