为满足特定语句的JList元素设置前景

Yod*_*oda 2 java swing jlist listcellrenderer

JLists和他们的渲染器一直存在问题.我有Result一个有字段的类:private double sum; 我还创建了一个JList包含Result类的实例:

model = new DefaultListModel<Result>();
list = new JList<>(model);
Run Code Online (Sandbox Code Playgroud)

我想为列表中满足此语句的那些元素设置前景或背景(以较小者为准)为红色:result.sum > 10.

我试图写一个扩展的课程,ListCellRenderer但最后却以灾难告终.请帮忙.

import java.awt.Component;

import javax.swing.JList;
import javax.swing.ListCellRenderer;

    public class MyCellRenderer implements ListCellRenderer<Result> {

        @Override
        public Component getListCellRendererComponent(JList<? extends Result> arg0, Result arg1, int arg2, boolean arg3, boolean arg4) {
            if(result.getSuma() > 10)
                setForeground(Color.red);
            return arg0;
        }        
    }
Run Code Online (Sandbox Code Playgroud)

ale*_*410 5

我建议你使用DefaultListCellRenderer和覆盖getListCellRendererComponent你的porpuses的方法,在super.getListCellRendererComponent()你的自定义返回.我给你一个渲染器的例子,String为你的porpuses修改它:

private static ListCellRenderer<? super String> getCellRenderer() {
    return new DefaultListCellRenderer(){
        @Override
        public Component getListCellRendererComponent(JList<?> list,Object value, int index, boolean isSelected,boolean cellHasFocus) {
            Component listCellRendererComponent = super.getListCellRendererComponent(list, value, index, isSelected,cellHasFocus);
            if(value.toString().length()>1){
                listCellRendererComponent.setBackground(Color.RED);
            } else {
                listCellRendererComponent.setBackground(list.getBackground());
            }
            return listCellRendererComponent;
        }
    };
}
Run Code Online (Sandbox Code Playgroud)

此方法为文本设置背景颜色,其长度大于1.

在此输入图像描述