【问题标题】:JAVA: How to use paint() method to update the previously drawn object?JAVA:如何使用paint() 方法更新先前绘制的对象?
【发布时间】:2010-12-26 02:46:27
【问题描述】:

如何使用paint(),这样当调用repaint() 时,先前绘制的对象在绘制新对象时不应该被删除。那就是绘图区域必须只更新而不是重绘。

在我的代码中,当单击多个按钮之一时,会显示一些 aplhabet。我希望具有这样的功能,即当单击其他按钮时,必须存在先前绘制的字母。就像单击按钮时创建的一串字母一样。 我使用 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);
}

【问题讨论】:

    标签: java swing paint


    【解决方案1】:

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

    与此 Kim 的 RepaintManager 结合使用是限制重绘内容的好方法。它是基于区域的,因此在确定屏幕的哪个区域已更改时存在一些复杂性。如果您有时间,最好使用类似的东西,否则以后可能很难添加此功能。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2010-10-04
          • 2013-03-12
          • 1970-01-01
          • 2017-06-27
          • 2013-11-29
          • 2018-08-23
          • 2015-11-15
          • 1970-01-01
          相关资源
          最近更新 更多