我是Java的新手,正在开发一个标准的介绍项目,它可以创建多个(< 10)定时器,每个定时器可以独立启动和停止。一旦开始,他们会从每秒一次的初始开始时间开始倒计时,显示更新等等等等。
我目前的设置正在运行,似乎符合项目的要求。我想知道总体布局,以及是否有一种更聪明的方式来接近。
目前,我有:
if event.getSource == (thisbutton)
语句的类中捕获的。我的教科书给出了一个分配一个监听器以查看按下哪个按钮而不是每个按钮都有一个监听器的示例,所以我在这里采用了这种方法。您希望提供任何一般性建议。
答案 0 :(得分:1)
你需要问几个问题......
它的可扩展性如何?有哪些性能考虑因素?
如果您查看当前的方法,则只有一个ActionListener
监视所有按钮。如果您需要将Timers
的数量增加到20,100,1000,会发生什么?这是一项额外的工作和非常大的if
陈述。
现在,我特别关注维持责任级别,并且必须在if
之内维持多级ActionListener
语句,真的不喜欢这种方法......
相反,您可以将所有内容(例如按钮)放在某种List
中,并在调用actionPerformed
方法时循环遍历列表,但即使这样也很难管理,也可能不会从长远来看,满足您的设计要求。您可能会或不会允许ActionListener
了解您的按钮,或者由于参考问题等原因您无法访问List
...
就个人而言,我会创建两个类,StartActionListener
和StopActionListener
。这些将引用(至少)Timer
。
这意味着,要添加新的开始按钮,您只需创建一个新的JButton
并创建StartActionListener
的新实例并注册到该按钮。您可以为停止按钮执行类似操作,向其中注册StopActionListener
的实例。
这将监听器设计与应用程序设计分开,因为听众实际上根本不需要关心按钮,只有他们正在管理的Timer
。这意味着每个监听器只负责一件事,并为设计提供一定程度的抽象,让您自由选择如何实际实现整体设计/要求。
您可能还希望查看How to use Actions,它提供了为操作提供配置详细信息的功能,从而更轻松地创建控件。
运行多个Timers
可能无法很好地扩展,并且会在您增加数量时引入性能问题,直至UI更新开始受损。
最好使用一个Timer
定期“定时”,而不是创建新的Timer
,您只需将ActionListener
注册到一个Timer
{1}}。
这可能意味着ActionListener
需要保持知道何时注册,以便它可以确定每个“tick”已经过去的时间量,但这将考虑到你试图解决的问题。同样,您可以根据ActionListener
保留某种计数器。