Yod*_*oda 2 java swing jlist listcellrenderer
我JLists和他们的渲染器一直存在问题.我有Result一个有字段的类:private double  sum;
我还创建了一个JList包含Result类的实例:
model = new DefaultListModel<Result>();
list = new JList<>(model);
我想为列表中满足此语句的那些元素设置前景或背景(以较小者为准)为红色: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;
        }        
    }
我建议你使用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;
        }
    };
}
此方法为文本设置背景颜色,其长度大于1.

| 归档时间: | 
 | 
| 查看次数: | 1313 次 | 
| 最近记录: |