gpt4 book ai didi

java - 如何根据状态更新 GUI

转载 作者:行者123 更新时间:2023-11-29 05:43:37 24 4
gpt4 key购买 nike

我有一个对象“Test”的 JList,它使用自定义 ListCellRenderer 来显示测试的名称和旁边的图标。图标代表测试的状态(警告、就绪、运行、完成)。 Test 有一个返回 int 的 getStatus() 方法。当测试状态改变时,如何让 GUI 知道重新绘制?

最佳答案

我认为关键在于您的 ListModel。大概这扩展了 AbstractListModel。模型应该监听或通知模型中包含的测试对象的更改,然后需要调用模型的 fireContentsChanged(...) 方法。这样做会通知监听模型的 View ,它必须重新绘制自己的一部分。

监听更改的一种方法是使用 SwingPropertyChangeSupport 对象使您的状态成为“绑定(bind)”属性,然后让模型将 PropertyChangeListeners 添加到它持有的项目。

实现这个:

  • 测试类应该有一个 SwingPropertyChangeSupport 对象。
  • Test 类应同时具有 addPropertyChangeListener 和 removePropertyChangeListener 方法,然后向 SwingPropertyChangeSupport 对象添加或从中删除监听器。
  • Test 类将有一个 setStatus(...) 方法,该方法在其持有的 SwingPropertyChangeSupport 对象上调用 firePropertyChange(...)
  • 为您的 ListModel 提供一个 addItem(...) 方法,该方法不仅将 Test 对象添加到模型的核心,而且还将 PropertyChangeListener 添加到 Test 对象。您可以而且很可能应该对列表中的所有项目使用相同的 PropertyChangeListener。
  • 当然这个方法也会调用fireIntervalAdded(...)
  • 同样,为此类提供一个 removeItem(...) 方法,该方法删除相同的 PropertyChangeListener 并调用 fireIntervalRemoved(...)
  • 考虑为您的 ListModel 提供一个用于 PropertyChangeListener 的内部类,并在该类的 propertyChange 方法中,通过 getSource() 方法识别哪个测试对象发生了变化,找到该测试对象的索引,然后然后调用 fireContentChanged(...)

关于java - 如何根据状态更新 GUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16618155/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com