将JList里面的内容用JCheckBox表示,要调用JList里面的setCellRenderer(arg0)方法,但它里面的参数是如下类型:
ListCellRenderer<? super ListCellBaseSubjectModel>,所以你要定义一个类,它要实现ListCellRenderer这个接口,任何继承这个类的子类都可以作为arg0的参数,下面是一种方法:
package com.mec.Subject.view;
import java.awt.Color;
import java.awt.Component;
import javax.swing.JCheckBox;
import javax.swing.JList;
import javax.swing.ListCellRenderer;
import javax.swing.UIManager;
import javax.swing.border.Border;
import javax.swing.border.EmptyBorder;
import com.mec.Subject.model.ListCellBaseSubjectModel;
public class CheckBoxListCellRenderer extends JCheckBox
implements ListCellRenderer<ListCellBaseSubjectModel> {
private static final long serialVersionUID = 387467106131962455L;
protected static Border m_noFocusBorder = new EmptyBorder(1, 1, 1, 1);
public CheckBoxListCellRenderer()
{
super();
setOpaque(true);
setBorder(m_noFocusBorder);
}
@Override
public Component getListCellRendererComponent(JList<? extends ListCellBaseSubjectModel> list,
ListCellBaseSubjectModel value, int index, boolean isSelected, boolean cellHasFocus) {
setText(value.toString());
setEnabled(value.isEnabled());
setSelected(value.isSelected());
setToolTipText(value.getHelpString());
Color bkground = isSelected ? list.getSelectionBackground() : list.getBackground();
bkground = isEnabled() ? bkground : value.getBackground();
setBackground(bkground);
if(list.isEnabled())
setForeground(isSelected ? list.getSelectionForeground() : value.getForeground());
else
setForeground(Color.LIGHT_GRAY);
setFont(list.getFont());
setBorder((cellHasFocus) ? UIManager.getBorder("List.focusCellHighlightBorder") : m_noFocusBorder);
return this;
}
}