我一直对 JLists
及其渲染器有问题。我的类 Result
具有字段:private double sum;
我还创建了一个包含 Result
类实例的 JList
:
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
方法,其中使用您的自定义返回 super.getListCellRendererComponent()
。我给你一个 String
的 Renderer 示例,根据你的用户修改它:
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的文本设置背景颜色。
关于java - 为满足特定语句的 JList 元素设置前景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20169657/