所以,我有两个类,一个是观察者
和可观察
。observable有一个char变量
,该变量被更改,当它被更改时,ChangeTurnListener
事件将被激发,它的onChangeTurn()
方法将该char变量作为参数传递。
一切工作都很好,char变量存在于观察者中,但JLabel似乎不会更新文本。我试过使用repaint()
,但没有成功。还尝试在JLabel上使用paintimediately()
,它出现了一小会,然后就消失了。
我想做的很简单:
@Override
public void onChangeTurn(String whoseMove) {
System.out.println("OnChangeTurn ran");
System.out.println("WhoseMove passed through onChangeTurn: " + whoseMove);
jlTurn.setText("It's your turn " + whoseMove);
}
我已经意识到这是JLabel的问题,所以我尝试在JLabel上使用FirePropertyChanged(...)
,但仍然没有成功。
我假设这可能与Java Swing中的并发性有关。
如果我只设置为随机文本,它就可以工作,但如果我提供whoseMove参数,它就不行了。
提前道谢。
正如@Oleksandr在评论中所指出的。在Java的Swing应用程序中,即使用javax.Swing
包中的类的应用程序,如jlabel
,会启动一个特殊的线程。这个线程有很多名称,包括事件调度线程或EDT。正如@Oleksandr所指出的,调用类JLabel
中的方法setText()
的代码必须在此线程上执行。类@OlekSandr提到的-javax.swing.swingUtilities
-还包含[static]方法isDispatchThread()
,如果从EDT调用该方法,则返回true。如果不是从EDT调用,那么您可以调用invokelater()
方法,也可以调用SwingUtilities
类中的方法,以确保它将在EDT上执行。
在App开发中,经常会遇到页面间传值的需求,比如从新闻列表页进入详情页,需要将新闻id传递过去; Html5Plus规范设计了evalJS方法来解决该问题; 但evalJS方法仅接收字符串参数,涉及多个参数时,需要开发人员手动拼字符串; 为简化开发,mui框架在evalJS方法的基础上,封装了自定义事件,通过自定义事件,用户可以轻松实现多webview间数据传递。 仅能在5+ App及流应用中使用
自定义事件主要会被用于框架、组件设计与实现中。 自定义的事件有许多的创建方式,但实际的业务场景中几乎不会被用到,网络上的文献记载其具体的使用场景也相对较少。 1. 使用 Event 构造函数 使用 Event 构造函数就可以创建一个自定义事件。 案例演示 预览 复制 复制成功! <style> .btn { border: 1px solid #4caf50; padding: 8px 12p
自定义事件 Custom events iScroll还提供额一些你可以挂靠的有用的自定义事件。 使用on(type, fn)方法注册事件。 myScroll = new IScroll('#wrapper'); myScroll.on('scrollEnd', doSomething); 上面的代码会在每次滚动停止是执行doSomething方法。 可以挂靠的事件如下: beforeScrol
我们知道,父组件使用 prop 传递数据给子组件。但子组件怎么跟父组件通信呢?这个时候 Vue 的自定义事件系统就派得上用场了。 使用v-on绑定自定义事件 每个 Vue 实例都实现了事件接口,即: 使用$on(eventName)监听事件 使用$emit(eventName, optionalPayload)触发事件 Vue 的事件系统与浏览器的EventTarget API有所不同。尽管它们的
上述提到的事件都是系统内置的,如触摸事件,键盘事件等。此外,你可以制作自定义事件,这些事件不是由系统控制触发的,而是通过代码手动触发。 创建自定义事件监听器: _listener = EventListenerCustom::create("game_custom_event1", [=](EventCustom* event){ std::string str("Custom event
在本书前面,你已经学到事件是JavaScript 与浏览器交互的主要途径。事件是一种叫做观察者的设计模式,这是一种创建松散耦合代码的技术。对象可以发布事件,用来表示在该对象生命周期中某个有趣的时刻到了。然后其他对象可以观察该对象,等待这些有趣的时刻到来并通过运行代码来响应。 观察者模式由两类对象组成:主体和观察者。主体负责发布事件,同时观察者通过订阅这些事件来观察该主体。该模式的一个关键概念是主体