- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 Java 新手,正在开发一个看起来像标准介绍项目的项目,该项目创建多个 (<10) 个计时器,每个计时器都可以独立启动和停止。启动后,它们会每秒从初始启动时间开始倒计时一次,并显示更新等等。
我当前的设置正在运行,并且似乎满足项目的要求。我想知道总体布局以及是否有更聪明的方法来实现。
目前,我有:
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/
已经尝试解决这个问题一天多了,现在抛出白旗。在 UMUC 上这门课,这几乎是一个自学类(class),没有任何帮助,所以我真的很高兴能够在这里提出这个问题。 只是从概念上问这个问题,因为我什至无法理解
我有一个带有属性 pin、发件人姓名、收件人姓名、发件人电话、金额的现金表单,以及另一个带有属性 pin、发件人姓名、收件人姓名、发件人电话、金额、银行名称、帐号的表单帐户。 两种形式都有发送命令 现
我需要做的是一个生产者/消费者程序。我需要做 2 个生产者线程(第一个将继续发送 AcionEvent,间隔 4 秒,第二个将执行相同的操作,间隔 10 秒)。消费者线程需要是带有 JTextArea
我注意到,即使指定条件语句,ActionEvent 仍会在我的 JRadioButtonMenuItem 组中触发: if(!button.isSelected()) //Do stuff
简而言之: 我正在致力于使用 AI 和 GUI 创建纸牌游戏。用户的手显示在游戏界面上,我尚未完成界面,但我打算将牌面图像添加到屏幕上的矩形中。我没有找到 5 种几乎相同的方法,而是找到了一篇类似的文
我看过网上的java教程,它们似乎都关心捕获其他已编写的组件发出的ActionEvents。是否可以编写自己的对象,这些对象有自己的一组标准来触发actionEvents,然后可以被注册为监听器的其他
最近我一直在玩 Java Swing,并尝试创建一个自定义的 Minecraft 服务器启动器。当我按下标有“属性”的按钮时,它应该更改为一个新面板并在某一时刻执行此操作。但是,由于某种原因,我看不到
我已经扩展了 JTextField。我的类(class)有多个 ActionListeners,但我特别需要一个始终首先触发。有没有办法确保特定的 ActionEvent 总是最先出现? 请注意,我确
我正在制作一个程序,可以根据用户输入用文字或字符包装文本。我的所有工作正常,但ActionEvent却给我一个“找不到符号”错误。我敢肯定,我错过了一些小东西,但是我似乎找不到它: import ja
我构建了一个简单的 JavaFX 应用程序,当鼠标进入椭圆时,我不想在椭圆的中心创建一个圆。 这是一些代码: ellipse = new Ellipse(30,30,40,40); ellipse.s
为了测试我对 Java 接口(interface)的理解,我将按钮单击事件处理程序中的匿名类拉到一个单独的类中 - 这已经起作用了 - 但我不明白它为什么起作用。 我原以为必须自己调用类的 handl
我还是 Java 新手,在单击按钮时更改 JLabel 中的图像时遇到问题。我没有收到任何编译器错误,但确实收到了运行时错误。 Line 107: l1.setIcon(icon); “线程“AWT-
我已经在这方面得到了一些帮助,但是现在当我按下按钮时,没有任何反应。我希望当您单击按钮时显示文本。如果是布局问题,我应该使用哪一个? FlowLayout 不适用于此程序,因为它会扭曲按钮。 impo
我试图在按下按钮时启用/禁用标签,并且我想在事件期间而不是事件之后执行此操作。正如您在下面看到的,我尝试启用/禁用两个标签:lblKeyboard 和 lblGamepad。 它们最终在“Remote
我有两个类,一个包含两个组合框的 gui 类和一个监听两个组合框的监听器类。该软件是关于披萨的,组合框是选择披萨的类型和数量,我将发布相关代码。 (gui class) private Listene
找到解决方案 决定在 actionListener 之外创建一个名为 chairPrice 的方法更容易,该方法可以通过名为 getItemPrice() 的方法递增。这已用于计算元素和作品总价的10
我的代码属于 LWUIT 应用程序,但存在 LWUIT 和 java swing 之间常见问题。 我有一个表格,在它的最后一个单元格上设置了一个按钮作为组件 我的问题只是为什么当我按下该按钮时没有发生
我是 Java 新手,正在开发一个看起来像标准介绍项目的项目,该项目创建多个 (<10) 个计时器,每个计时器都可以独立启动和停止。启动后,它们会每秒从初始启动时间开始倒计时一次,并显示更新等等。 我
我正在开发一个相当大(且有缺陷)的 JSF 应用程序,用户经常提示我们难以重现的问题。 是否可以拦截所有 ActionEvents 的创建,以便我可以记录它们的创建? 如果没有,是否有一种自动方式(J
首先,如果标题很简短,我深表歉意,我已经考虑过,但无法为我的问题提供足够短的摘要。 我有一个由 JButton 组成的 JPanel 类。 我有我的主 Swing 应用程序类,其中包含 Swing 组
我是一名优秀的程序员,十分优秀!