正确更新秋千组件?

正确更新秋千组件?,第1张

正确更新秋千组件?

您似乎缺少许多重要的概念。

  1. 摇摆是事件驱动的环境。这意味着您没有办法(或至少只有很少几种)可以“等待”用户输入,通常,您只需要对他们的交互做出反应即可。
  2. Swing由单个线程驱动,称为事件调度线程(AKA EDT)。该线程负责将进入应用程序的事件分派/处理到应用程序的适当部分,以便事件可以采取行动。
  3. 重涂管理器将其更新请求发布到EDT上。

您采取的任何阻止EDT进行这项工作的措施,都会使您的应用程序看起来像挂了一样。

您绝不能

Thread#sleep
在EDT上执行任何耗时的 *** 作(例如I / O,循环等),这样做会使您的应用程序“暂停”,这从来都不是很漂亮的。

通读Swing中的并发以获取更多信息。

现在,您有许多选择。您可以使用a

Thread
在后台“等待”并向后转卡片,也可以使用a
SwingWorker
或a
javax.swing.Timer

您遇到的另一个问题是,

Thread
除EDT之外,切勿更新任何UI组件。这意味着,如果您使用
Thread
,则将负责将该线程与EDT重新同步。虽然并不困难,但只是变得凌乱。

SwingWorker
javax.swing.Timer
具有使 *** 作变得更加容易的功能。

线程和

SwingWorker
非常适合执行后台处理,并且对于该问题而言简直是过分杀伤力。相反,a
javax.swing.Timer
非常适合这里。

if (!Control.model.twoCardsTurned)    {        if ("unturn".equals(action))         { new Timer(1000, new ActionListener() {     public void actionPerformed(ActionEvent evt) {         keypadArray[pos].setIcon(back);         keypadArray[Control.model.lastCard].setIcon(back);         System.out.println("Card: "+pos+" unset");         System.out.println("Card: "+Control.model.lastCard+" unset");     } }).start();        }    }

这是一个非常简单的例子。您可能希望添加一些控件,例如,在计时器启动之前,这些控件将阻止用户单击任何内容。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5500268.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存