我想要在随机位置绘制一个字符串,然后跳转到一个新位置,但留下自己的印记。
java 中似乎没有“stamp”命令。
我该怎么做?
到目前为止,我只有一个随机角色,它会跳跃,但不会留下自身的副本。
import java.awt.Canvas;
import java.awt.Graphics;
import java.util.Random;
import javax.swing.JFrame;
@SuppressWarnings("serial")
public class test extends Canvas {
private static Random random = new Random();
public void paint(Graphics g) {
g.drawString("X", random.nextInt(10) * 10, random.nextInt(10) * 10);
try {
Thread.sleep(250);
} catch (Exception e ) {}
repaint();
}
public static void main(String[] argS) {
test canvas = new test();
JFrame frame = new JFrame();
frame.add(canvas);
frame.setSize(300, 300);
frame.setVisible(true);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
最佳答案
建议:
- 不要将 Swing 与 AWT 组件混合使用,因此不要使用 Canvas 对象,而是使用 JPanel。
- 重写 JPanel 的 PaintComponent 方法。
- 调用super.paintComponent方法作为paintComponent的第一行。
- 使用 Swing Timer 来制作动画,并且切勿将 Thread.sleep 放入paint或paintComponent方法中。事实上,除非您知道如何在 Swing 中处理并发,否则您应该避免在 Swing GUI 中的任何位置使用 Thread.sleep。
- 切勿在paint或paintComponent方法中调用repaint()。您很幸运,绘制管理器足够聪明,不会允许该调用导致递归引起的堆栈溢出错误。
关于java Canvas 抽绳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7004330/