用Swing进行线程化

时间:2011-11-04 23:15:23

标签: java multithreading swing graphics awt

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

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

另外,在以下方法中:

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

有没有办法将这些操作分成多个方法?即绘制到Canvas的多个方法?

提前致谢。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

有关详细信息,请参阅Performing Custom Painting上的Swing教程中的部分。