如何让我的 JFrame 绘图自动更新?

问题描述 投票:0回答:2

目前,我有一个包含

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

有人知道我该怎么做吗?

java jframe jpanel paint paintcomponent
2个回答
0
投票

您需要做的是,只要您知道面板上的图像部分发生变化,就通知 swing 组件。正如您所说,通常的方法是调用

repaint()
,如果您知道“无效”的矩形,您也可以指出。

根据导致

JPanel
内容的事件,您需要更改应用程序设计,以便应用程序的表示部分“侦听”下面数据的变化,并在这些变化发生时重新绘制。

还有另一种方法称为

paintImmediately()
,它可能适用于某些情况,但你必须多描述一下你的场景,在哪些情况下你需要不断重绘。


0
投票

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

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

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

也许更好的设计是服务器应该将更新“推送”到客户端,而客户端应该监听更改然后重新绘制自己。也许所有关于套接字部分会帮助你。

编辑:

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

java 文档服务器 1234

这将启动一个监听端口 1234

的服务器

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

java 文档客户端 1234 3

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

您可以在此处获取压缩文件:

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

© www.soinside.com 2019 - 2024. All rights reserved.