使用JList更改特定索引的颜色

use*_*712 1 java swing colors jlist listcellrenderer

如何使用JList更改特定索引的颜色,我设法更改颜色,但它会更改整个列表的颜色,我需要能够将特定索引更改为一种颜色,将另一种索引更改为另一种颜色.

我已经尝试了很多组合,它们似乎只改变整个列表颜色而不是索引.我理解为什么因为它指的是整个列表,我只是不知道如何为特定索引更改它.

    m.aList.setCellRenderer(new MyCellRender());

  private class MyCellRender extends DefaultListCellRenderer  
{    

    public Component getListCellRendererComponent( JList list,  
            Object value, int index, boolean isSelected,  
            boolean cellHasFocus )  
    {  
        super.getListCellRendererComponent( list, value, index,  
                isSelected, cellHasFocus );  

        ArrayList<Object> values = new ArrayList<>();
        ArrayList<String> complete = new ArrayList<>();
        ArrayList<String> incomplete = new ArrayList<>();

        for (int i = 0; i < list.getModel().getSize(); i++) {
            values.add(list.getModel().getElementAt(i));
        }

        for (Object o : values) {
           if (o.toString().contains("COMPLETED")) {
               complete.add(o.toString());
           }
           if (o.toString().contains("INCOMPLETE")) {
               incomplete.add(o.toString());
           }
        }

        for (String s : complete) {
            setForeground(Color.green);
        }
        for (String s1 : incomplete) {
            setForeground(Color.red);
        }

        return( this );  
    }  
}
Run Code Online (Sandbox Code Playgroud)

列表中的值包含COMPLETED或INCOMPLETE,我想根据它们的值更改颜色.

dic*_*c19 6

列表中的值包含COMPLETED或INCOMPLETE,我想根据它们的值更改颜色.

首先,没有必要保留这三个列表:

ArrayList<Object> values = new ArrayList<>();
ArrayList<String> complete = new ArrayList<>();
ArrayList<String> incomplete = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)

所述ListCellRenderer分量在每个元件评价的JList所以这些列表是没有意义的.您可以轻松地实现您的要求,如下所示:

private class MyCellRender extends DefaultListCellRenderer {
   @Override
   public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
       super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
       if(value.toString().contains("INCOMPLETE") ||  value.toString().contains("COMPLETED")) {
           Color fg = value.toString().contains("COMPLETED") ? Color.green : Color.red;
           setForeground(fg);
       } else {
           setForeground(list.getForeground());
       }
       return this;
   }
}
Run Code Online (Sandbox Code Playgroud)

看看来编写自定义单元格渲染器在部分如何使用列表踪迹进一步的细节.