我有一个名为CharMove的类,它是paint(Graphics g)方法和一些自定义方法。班级应创建一个正方形,然后在屏幕上随机移动该正方形。但是,当我在我的世界级中创建这个类的两个实例时,只会出现一个方块。首先广场不移动,但显示新的坐标。然后5次运行后,广场开始随机移动。我认为该程序被捕获的Graphics方法,因为只有一个正方形正在创建,当CharMove类应该创建Graphics.I的另一个实例已经在网上搜索,但无法找到一种方法来创建Graphics.Thanks的不同实例提前。如何让一个类创建自己的Graphics实例
CharMove类
import java.awt.*;
import java.util.concurrent.TimeUnit;
import javax.swing.*;
import java.util.Random;
public class CharMove extends JPanel {
int x = 250;
int y = 250;
public void paint(Graphics g) {
Graphics pane = (Graphics2D) g;
pane.setColor(Color.blue);
pane.fillRect(x, y, 10, 10);
}
public void movement(JFrame frame) {
for (int i=0;i<5;i++) {
try {
TimeUnit.SECONDS.sleep(1);
this.x = Getx(this.x,frame);
this.y = Gety(this.y,frame);
frame.repaint();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public int Getx(int a, JFrame frame) {
Random rn = new Random();
int xnum = rn.nextInt(10)-5;
a += xnum;
System.out.println("x:" + a);
return a;
}
public int Gety(int b, JFrame frame){
Random rn = new Random();
int ynum = rn.nextInt(10)-5;
b += ynum;
System.out.println("y:" + b);
return b;
}
}
世界级
import java.awt.*;
import java.util.concurrent.TimeUnit;
import javax.swing.*;
import java.util.Random;
public class World {
public static void main(String[] args) {
JFrame game = new JFrame();
game.setTitle("Matrix");
game.setSize(500, 500);;
game.getContentPane().setBackground(Color.white);
game.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
game.setVisible(true);
CharMove char1 = new CharMove();
CharMove char2 = new CharMove();
game.add(char1);
game.add(char2);
char1.movement(game);
char2.movement(game);
}
}
不是问题,但'Graphics pane =(Graphics2D)g;'不是必须的:只需直接使用'g'。 –
方法名称不应以大写字符开头。你有没有见过以大写字母开头的“get”方法?遵循约定。 – camickr