【问题标题】:Draw graphics without deleting them when using repaint()使用 repaint() 绘制图形而不删除它们
【发布时间】:2012-01-18 16:17:16
【问题描述】:

我有一个绘图方法,我希望在调用 repaint() 后 drawLine 保留在屏幕上。 fillOval 会移动,没关系。但我希望 drawLine 只在另一个位置重绘而不删除它。

public void paint(Graphics g) {
    super.paint(g);

    g.setColor(Color.RED);
    g.drawLine(x, y, x+10, y+10);
    g.setColor(Color.BLACK);
    g.fillOval(x - radius, y - radius, radius * 2, radius * 2);

}

【问题讨论】:

  • 您的意思是除了它的新位置之外,您还希望原来的绘制线还在吗?或者您只是想在重绘发生后将重绘中的同一行放在新位置?
  • 自定义绘画是通过覆盖paintComponent() 方法而不是paint() 方法来完成的。人们如何继续使用paint() 方法查找示例?
  • @camickr simple answer ---> 在所有 Java Swing 示例库上,无一例外,例如java2s.com/Tutorial/Java/0261__2D-Graphics/…技术...
  • 那个网站应该因为绘画问题被禁止:)

标签: java swing graphics


【解决方案1】:

在重绘请求中,必须使用以下方法之一指定“脏区”的坐标和尺寸:

请注意,在执行自定义绘制时,您需要覆盖 paintComponent,而不是 paint

【讨论】:

  • 不错的答案,即使我仍然认为 super & dispose +1
【解决方案2】:

您可以将每行的xy 存储在List 中。在每个repaint() 上,您只需重绘List 中存在的所有行

【讨论】:

  • 这种方法似乎是多余的。为什么不只限制你重绘的区域,而不是重绘所有东西并做不必要的簿记?
  • @mre 这真的取决于他想做什么。在下一次重绘的情况下这不是多余的,他想将线条平移 10 个像素等。
  • @mre 虽然理论上可以限制重绘区域,但这种方式会更加健壮。如果窗口由于选择了重叠的另一个窗口而被部分遮挡,或者最小化了窗口,则可能需要重新绘制整个应用程序屏幕。然后什么?你必须做一个完整的重绘。然后你将需要所有的簿记来重新创建屏幕上已经出现的内容。
猜你喜欢
  • 1970-01-01
  • 2011-03-14
  • 2011-08-14
  • 2019-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-30
相关资源
最近更新 更多