先放效果图吧,代码是从程序里抽出来的,没有特意的做效果,挺丑的凑合着看吧。前面是思路,不想看思路的,可以直接跳到后面看源码(有3个类哦)。
一、实现JList每一项以图片的形式展示并附带滚轮思路:
1.需要【JScrollPane】对象,将JList放置在JScrollPane上,而不是普通的JPane中。
JScrollPane scrollPane = new JScrollPane(list);
panel_1.add(scrollPane, BorderLayout.CENTER);
2.需要【JList】对象,JList对象中设置模型
JList<File> list = new JList<File>();
3.需要【DefaultListCellRenderer】接口
(1)JList并不会显示图片,那么我们就重写JList的渲染器ListCellRenderer。可是ListCellRenderer是一个接口,在这里我们选择自定义一个DefaultListCellRenderer类,从API中,我们看到DefaultListCellRenderer继承了JLabel,这意味着我们可以使用这个类的对象,在绘制的时候直接设置JLabel标签的图标。而不用再去创建很多JLabel对象。
public class ImageCellRender extends DefaultListCellRenderer {
private static final long serialVersionUID = 1L;
}
(2)真正控制如何绘制JList的是getListCellRendererComponent(参数列表)方法,所以我们在自定义类ImageCellRender 中需要重写getListCellRendererComponent(参数列表)方法,在重写里面的具体代码之前,我们先分析一下这个方法的参数列表:
JList<? extends Object> list:正在绘制的JList
Object value:由list.getModel().getElementAt(index)返回的值
int index:单元格索引
boolean isSelected:如果选择了指定的单元格,则为true
cellHsaFocus:如果指定的单元格拥有焦点,则为true
public class ImageCellRender extends DefaultListCellRenderer {
private static final long serialVersionUID = 1L;
public Component getListCellRendererComponent(JList<? extends Ob