【问题标题】:Threading with Swing用 Swing 穿线
【发布时间】:2011-12-22 10:35:24
【问题描述】:

基本上,我有一个程序,它有一个创建基本 GUI 的类,以及另一个扩展 Canvas 的类。这个 Canvas 类以通常的方式myPanel.add(object) 添加到 JPanel。现在,在这个类中,我想要一些方法来移动矩形等对象。

我的问题是这些;有没有办法让这个 JPanel 或其添加的对象 (myCanvas) 在单独的线程上运行?

另外,在以下方法中:

public void paint(Graphics g){
    g.setColor(Color.black);
    g.drawRect(0, 0, 50, 50);
}

有没有办法将这些操作拆分为多个方法? IE。绘制到 Canvas 的多种方法?

提前致谢。

【问题讨论】:

  • @mKorbel 我认为这不是awt 问题,尽管Graphics 类恰好在java.awt 包中...
  • @glowcoder hmmmm 也许你是对的,但 OP 描述了一些关于 Canvas 的内容:-)

标签: java multithreading swing graphics awt


【解决方案1】:

不要使用 Canvas 是 Swing 应用程序。使用 JPanel 或 JComponent 并覆盖 paintComponent() 方法。也不要忘记方法开头的 super.paintComponent(g)。

有关更多信息,请参阅 Performing Custom Painting 上的 Swing 教程部分。

【讨论】:

    【解决方案2】:

    在某处存储可绘制对象的列表(可能是您的 Canvas 类,但我建议您在逻辑之外......)并使用您的其他线程来更新此对象列表。

    您的绘图循环可以简单地清除您的画布(或至少需要重新绘制的区域)并绘制它们。理想情况下,您的屏幕渲染速度应该足够快,以便于完成重绘,并根据需要缓存子部分。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-30
      相关资源
      最近更新 更多