JAVA:如何使用paint()方法更新以前绘制的对象?

时间:2010-11-09 11:22:12

标签: java swing paint

如何使用paint(),以便在调用repaint()时,绘制新对象时不应删除先前绘制的对象。也就是说,绘图区域必须仅获得UPDATED而不是REDRAWN。

在我的代码中,当单击其中一个按钮时,会显示一些aplhabet。我希望有这样的功能,当点击其他按钮时,必须存在先前绘制的alhabets。假设在单击按钮时创建了一串字母。 我正在使用Java Swing进行编码。

我的一些代码:

if(source == btnAlpha[i] )  
bollyDraw.repaint(); //bollydraw is an object of a JPanel extended class having implemented the paintComponent(Graphics g) method

在paint()方法中:

if (word[i] == key) {
g.drawChars(word, i, 1, x, y);
}

3 个答案:

答案 0 :(得分:1)

您的应用必须准备重新绘制已绘制的任何内容。根据您的描述,我担心这意味着您必须跟踪您所绘制的所有内容。

Swing行为部分由底层窗口管理器和图形系统决定,它可以随时选择在应用程序所在的区域上绘制。您可以覆盖update()来控制由您自己的应用程序启动的重绘,并且可以通过实现您自己的RepaintManager来提高性能。

本教程更详细地解释了Swing绘画:http://java.sun.com/products/jfc/tsc/articles/painting/

答案 1 :(得分:1)

在我工作的项目中,我使用List来存储要作为类成员绘制的对象。然后,当用户与我的UI交互时,我在此列表中添加/删除了项目。呈现项目的JPanel绘制了此列表中的项目。它有助于将UI逻辑与绘制逻辑分开,因为您可以确定触发事件时绘制到绘制列表中的内容,而不是绘制方法(应该尽可能干净)。然而,这将迫使您在每次油漆调用时重新绘制所有内容。

与此相结合,Kim的RepaintManager是限制重新绘制内容的好方法。它是基于区域的,因此在确定屏幕的哪个区域已经改变时存在一些复杂性。如果你有时间,最好使用这样的东西,否则很难在路上添加这个功能。

答案 2 :(得分:1)

Custom Painting Approaches根据您的具体要求显示了几种方法。