0

目前,我有一个JFrame包含一个JPanel. 这JPanel是我的程序的油漆。绘画意味着我所有的Graphics g.drawString 东西。现在,它只在用户与 交互时更新显示,但我希望它在不使用 while 循环(过多的 CPU 使用率)的情况JFrame下不断更新 ( ) 本身。repaint()

有谁知道我怎么能做到这一点?

4

2 回答 2

0

您需要做的是,只要您知道面板上的图像部分发生了变化,就通知摇摆组件。正如您所说,执行此操作的正常方法是调用repaint(),如果您知道“无效”的矩形,您也可以指出这一点。

根据导致JPanel.

还有另一种方法paintImmediately()可能适用于某些情况,但您必须描述更多您的场景以及在哪些情况下您需要不断地重新绘制。

于 2011-09-04T18:25:06.417 回答
0

我已经实现了一个功能齐全的互联网中继聊天系统,其中涉及绘画以查看您和其他人在说什么

听起来您正在尝试从服务器“拉”更新,然后您可以使用 SwingWorker 查询服务器以获取更新,然后将更新推送到 GUI。您可能希望 SwingWorker 休眠,这样它就不会不断地轮询服务器。

阅读 Swing 教程中关于Worker Threads 和 SwingWorker的部分以获取更多信息。

也许更好的设计是服务器应该“推送”更新给客户端,客户端应该监听变化,然后重新绘制自己。也许All About Sockets部分会帮助你。

编辑:

这是我 5 年多没看过的旧代码。“客户端”是一个简单的文本窗格,它将输入的每个字符发送到“服务器”。然后服务器将每个字符发送到连接到服务器的任何其他客户端。服务器拥有最新文档的想法。当一个客户端发送更改时,所有其他客户端都会收到更改通知。这样,所有客户端始终包含相同的数据。您的代码应该更简单,因为您只会向服务器发送完整的消息。要运行代码,请打开 dos 窗口并键入:

java 文档服务器 1234

这将启动一个侦听端口 1234 的服务器

然后打开另一个窗口并输入

java DocumentClient 1234 3

这将创建 3 个连接到服务器的客户端框架。键入任一帧将更新服务器。

您可以在此处获取 zip 文件:

http://www.camick.com/java/source/echo.zip

于 2011-09-04T19:49:02.887 回答