我创建了一个类" MyJList"它扩展了JList。我使用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来显示单元格(几个&#34;函数调用&#34;显示在输出中)。但是,我有以下警告:
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不再被调用(没有&#34;函数在输出中被称为&#34;。)
我不明白为什么。这是正常的吗?如果是,你知道如何指定列表包含String但是必须调用getListCellRendererComponent吗?
提前致谢。
答案 0 :(得分:0)
JList
和JList<String>
Object
和String
的类型不同,因此子类的方法不会覆盖getListCellRendererComponent()
的{{1}}方法1}}。
DefaultListCellRenderer
JList<?>
@SuppressWarnings("rawtypes")