1
我有一个使用自定义ListCellRenderer来显示测试的名称和它旁边的图标的对象“Test”的JList。图标代表测试的状态(警告,就绪,正在运行,完成)。 Test有一个返回int的getStatus()方法。如何在测试状态发生变化时让GUI知道重绘?如何根据状态更新GUI
我有一个使用自定义ListCellRenderer来显示测试的名称和它旁边的图标的对象“Test”的JList。图标代表测试的状态(警告,就绪,正在运行,完成)。 Test有一个返回int的getStatus()方法。如何在测试状态发生变化时让GUI知道重绘?如何根据状态更新GUI
我相信这个关键在于你的ListModel。据推测,这扩展了AbstractListModel。模型应该听取或者被通知模型中包含的测试对象的变化,然后需要调用模型的fireContentsChanged(...)
方法。这样做会通知视图,该视图监听模型,它必须重绘其本身的一部分。
监听更改的一种方法是使用SwingPropertyChangeSupport对象将您的状态设置为“绑定”属性,然后让模型将PropertyChangeListeners添加到其保存的项目中。
要实现这一点:
setStatus(...)
方法,该方法在其保存的SwingPropertyChangeSupport对象上调用firePropertyChange(...)
。addItem(...)
方法,该方法不仅将Test对象添加到模型的核心,还将PropertyChangeListener添加到Test对象。您可以也可能应该为列表中的所有项目使用相同的PropertyChangeListener。fireIntervalAdded(...)
。removeItem(...)
方法,删除相同的PropertyChangeListener,也调用fireIntervalRemoved(...)
。getSource()
方法确定哪个Test对象已更改,找到此Test对象的索引,然后调用fireContentChanged(...)
。
我发现SwingWorker实际上为你做了大部分工作:) – Aman