java Canvas 抽绳

标签 java user-interface canvas

我想要在随机位置绘制一个字符串,然后跳转到一个新位置,但留下自己的印记。

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/

相关文章:

java - 可以在我的类中使用 Thread 方法而不扩展 Thread 类吗

java - Java 桌面 GUI 内的 HTML5 View 、JavaScript 通信

java - Swing 显示多个子 jframe

javascript - Canvas 与 DOM 在 JavaScript 游戏开发中的优缺点是什么?

使用 SetTimeout() 的 JavaScript Canvas 动画

java - Spring MVC Controller 如何在ajax请求上绑定(bind)到多个模型

java - 无法为我的测试用例运行 java junit selenium 代码

java - 使用 Canvas 制作游戏菜单?

java - JAVA中的 hibernate 线程

c++ - 使用 Qt5 在 Windows 上获取 HWND(来自 WId)