如何更改未选中的 JList 项目的背景颜色?

How can i change the background color of a JList item that is not selected?

嘿嘿。我正在 Java 中编写一个删除非白名单文件的工具。不要问。它列出了用户使用 JFileChooser 选择的目录。这很好用,所有文件名都列在 JList 中(在我的例子中是在 JScrollPane 中)并显示在框架内。

现在我想从 .txt 文件中读取文件名并检查它们是否与列表中的名称匹配。阅读和比较没有问题。但如果文件与 .txt 文件中的文件之一匹配,我想设置绿色背景。如果不是,那么显示项目的背景应该是红色的。但是,如果可能的话,我该如何更改一行的这些背景呢?

很简单,使用以下方法将自定义 ListCellRenderer 设置为您的 JList:

list.setCellRenderer(myListCellrenderer);

现在在覆盖的方法 getListCellRendererComponent() 中执行如下操作:

public Component getListCellRendererComponent(.....) {
    Component c = super.getListCellRendererComponent();
    c.setBackGround(Color.blue)
    return c;
}

当逻辑确定您应该将该行显示为绿色时(当文件名相同时),您还可以选择在该行的支持对象上设置状态并在 getListCellRendererComponent( ), 如果状态正确则设置背景为绿色。同样,您可以选择设置 Swing Timer 来恢复支持对象的状态。