当前位置: 首页 > 知识库问答 >
问题:

JLabel自定义事件设置Text

江德润
2023-03-14

所以,我有两个类,一个是观察者可观察。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参数,它就不行了。

提前道谢。

共有1个答案

司空元凯
2023-03-14

正如@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 与浏览器交互的主要途径。事件是一种叫做观察者的设计模式,这是一种创建松散耦合代码的技术。对象可以发布事件,用来表示在该对象生命周期中某个有趣的时刻到了。然后其他对象可以观察该对象,等待这些有趣的时刻到来并通过运行代码来响应。 观察者模式由两类对象组成:主体和观察者。主体负责发布事件,同时观察者通过订阅这些事件来观察该主体。该模式的一个关键概念是主体