我创建了一个扩展 JList 的类“MyJList”。我使用 DefaultListModel 和一个名为“MyListCellRenderer”的自定义单元格渲染器。
这是一个运行良好的简单示例:
public class MyJList extends JList<String>{
private DefaultListModel<String> myModel = new DefaultListModel<String>();
public MyJList(List<String> args){
this.setModel(myModel);
this.setCellRenderer(new MyListCellRenderer());
if(args.size() > 0)
for(String e : args)
myModel.addElement(e);
}
public class MyListCellRenderer extends DefaultListCellRenderer{
public Component getListCellRendererComponent(JList list, Object value, int index, boolean iss, boolean chf){
System.out.println("Function Called");
super.getListCellRendererComponent(list, value.toString(), index, iss, chf);
return this;
}
}
public static void main(String[] args){
JFrame f = new JFrame();
f.setSize(500, 500);
List<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
f.add(new MyJList(list));
f.setVisible(true);
}
}
它运作良好。调用 getListCellRendererComponent 方法来显示单元格(输出中显示了几个“调用的函数”)。但是,我有以下警告:
JList is a raw type. References to generic type JList<E> should be parametrized.
我想最好在 JList 中指定对象的类型,所以我修改了以下行:
public Component getListCellRendererComponent(JList<String> list, String value, int index, boolean iss, boolean chf){
问题在于,通过此修改,不再调用 getListCellRendererComponent 方法(输出中没有“调用函数”)。
我不明白为什么。正常吗?如果是,您知道我如何指定列表包含 String 但仍然必须调用 getListCellRendererComponent 吗?
提前致谢。