java使用Swing显示文件状态的好方法是什么
我想做以下几点,我需要一些关于什么是最好的方法的建议
我有一个JList,它显示用户通过单击add(+)按钮添加的文件,并在用户单击remove(-)按钮时删除文件。对于每个添加的文件,我想关联一个图标,它应该指示文件的状态。例如,如果用户只添加了文件而没有运行该文件(我有另一个JButton用于运行带有所选文件的应用程序),那么这个图标应该是红色的,一旦用户运行它,这个图标应该变为绿色。此外,如果用户通过单击(-)按钮删除文件,它也应该删除与该特定文件关联的图标。下面是我想要的图片
我正在考虑将图像图标与每个添加的文件相关联,但我不确定如何更改其外观以显示状态。我也不确定删除文件时如何删除ImageIcon。除了ImageIcon,还有其他方法吗?欢迎提供任何帮助/建议
# 1 楼答案
在编程中,数据为王。数据的表示方式不应考虑到数据,这是UI/视图层的域/职责
这通常由model-view-controller pattern表示
在您的示例中,有两条(基本)信息。一个文件和一个状态(未运行、运行、删除),您希望将这些信息合并为“数据”。在Java中,这通常意味着一个普通的旧Java对象(或Pojo)
由于状态的可能性有限,我们可以使用
enum
来表示它,从而限制有效值然后我们可以创建自己的pojo
现在,当我们想知道文件的状态时,我们知道从哪里获取它
但是
JList
呢?问得好。我们真正想要的是,当任何FileOperation
对象的状态发生变化时,可以通过某种方式通知JList
现在,你可以在
ListModel
上迭代,但这不是一个非常干净的解决方案,更好的解决方案是允许FileOperation
在它发生变化时生成事件,让ListModel
监听它们并采取自己的行动这是observer patternƒ的一个基本概念
有很多方法可以做到这一点,但我很懒,所以我只打算使用可用的属性更改API
现在我们需要一个
ListModel
能对它做出反应现在,谜题的最后一部分是,你需要一个定制的
ListCellRenderer
,它可以显示你想要的信息为此,你必须从阅读How to use lists和Writing a Custom Cell Renderer开始