gpt4 book ai didi

java - 关于 ActionEvents、监听器和计时器

转载 作者:行者123 更新时间:2023-12-01 13:34:50 25 4
gpt4 key购买 nike

我是 Java 新手,正在开发一个看起来像标准介绍项目的项目,该项目创建多个 (<10) 个计时器,每个计时器都可以独立启动和停止。启动后,它们会每秒从初始启动时间开始倒计时一次,并显示更新等等。

我当前的设置正在运行,并且似乎满足项目的要求。我想知道总体布局以及是否有更聪明的方法来实现。

目前,我有:

  • 一个等待任何计时器按钮被按下的监听器。其中包括“开始”、“停止”、“重置”和“输入新时间”。对于 X 计时器,这意味着监听 4X 按钮。这一切都被捕获在一个带有多个 if event.getSource == (thisbutton) 语句的类中。
  • 每个计时器有一个监听器,每秒执行一次“减少时间并更新显示”命令。因此,所有这些都独立倒计时,具体取决于用户何时按下“开始”。

我的教科书给出了一个示例,分配一个监听器来查看按下了哪个按钮,而不是为每个按钮创建一个监听器,因此我在这里采用了这种方法。欢迎您提供任何一般性建议。

最佳答案

您需要问自己的几个问题...

它的可扩展性如何?性能方面有哪些考虑?

它的可扩展性如何?

如果您看一下当前的方法,您会发现有一个 ActionListener 监视所有按钮。如果您需要将 Timer 数量增加到 20、100、1000,会发生什么情况?这是大量的额外工作和非常大的 if 语句。

现在,我特别注重维护责任级别,并且之前必须在 ActionListener 中维护多级 if 语句,真的不喜欢这种方法。 .

相反,您可以将所有内容(例如按钮)放入某种 List 中,并在调用 actionPerformed 方法时循环遍历列表,但即使这样也会变得难以管理,从长远来看可能无法满足您的设计要求。您可能会也可能不允许 ActionListener 了解您的按钮,或者由于引用问题等原因您无法访问 List...

就个人而言,我会创建两个类,一个 StartActionListener 和一个 StopActionListener。这些将引用(至少)一个Timer

这意味着,要添加新的开始按钮,您只需创建一个新的 JButton 并创建 StartActionListener 的新实例并注册到该按钮。您可以对停止按钮执行类似的操作,注册一个 StopActionListener 实例。

这将监听器设计与应用程序设计分开,因为监听器实际上根本不需要关心按钮,只需要关心他们正在管理的Timer。这意味着每个监听器只负责一件事,并为设计提供一定程度的抽象,让您可以自由选择如何实际实现总体设计/需求。

您可能还想看看 How to use Actions它提供了为操作提供配置详细信息的能力,使创建控件变得更加容易。

性能考虑因素是什么?

运行多个计时器可能无法很好地扩展,并且当您增加计时器数量时会引入性能问题,直至 UI 更新开始受到影响。

最好使用一个定期“滴答”的Timer,而不是创建一个新的Timer,您只需注册一个 ActionListener 到单个 Timer

这可能意味着 ActionListener 需要知道它何时注册,以便它可以确定每个“tick”耗时量,但这需要考虑到您试图解决的问题的背景。同样,您可以简单地为每个 ActionListener 保留某种计数器。

关于java - 关于 ActionEvents、监听器和计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21368645/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com