目前,我有一个 JFrame 其中包含一个 JPanel. 。这 JPanel 是我程序的油漆。绘画意思是我所有的 Graphics g.drawString事物。现在,只有在用户与 JFrame, ,但我希望它不断更新(repaint())本身无需使用一段时间循环(CPU使用过多)。

有人知道我该怎么做吗?

有帮助吗?

解决方案

每当您知道面板上图像的一部分更改时,您需要做的是通知秋千组件。正常的方法是,正如您所说的那样, repaint() 而且,如果您知道“无效”的矩形,您也可以指出。

取决于导致内容的事件 JPanel, ,您需要更改应用程序设计,以使应用程序的演示部分“倾听”到发生这些更改时的数据和重新粉刷的更改。

还有另一种称为 paintImmediately() 这可能在某些情况下可以做到,但是您必须更多地描述您的场景,并且在哪些情况下您需要连续重新粉刷。

其他提示

我已经实施了功能齐全的互联网中继聊天系统,该系统涉及油漆以查看您和其他人在说什么

听起来您正在尝试从服务器“提取”更新,然后您可以使用Swingworker查询服务器以获取更新,然后将更新脉动到GUI。您将希望Swingworker睡觉,以免连续对服务器进行轮询。

阅读《摇摆教程》的部分 工人线和摇摆工人 了解更多信息。

也许更好的设计是为服务器“推”更新到客户端,客户应聆听更改然后重新粉刷自身。也许是 关于插座的所有内容 部分将为您提供帮助。

编辑:

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

Java Documentserver 1234

这将启动一台倾听端口1234的服务器

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

Java DocumentClient 1234 3

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top