未使用JList <string> </string>调用getListCellRendererComponent

时间:2015-04-22 07:55:14

标签: templates jlist listcellrenderer

我创建了一个类&#34; MyJList&#34;它扩展了JList。我使用DefaultListModel和一个名为&#34; MyListCellRenderer&#34;的自定义单元格渲染器。

这是一个效果很好的简单示例:

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吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

  • 如果要覆盖方法,则子类方法的参数必须与超类的参数相同。 JListJList<String> ObjectString的类型不同,因此子类的方法不会覆盖getListCellRendererComponent()的{​​{1}}方法1}}。
    (阅读有关覆盖方法的here。)

  • 如果要避免警告,请在列表中添加通配符 键入:
    DefaultListCellRenderer
    或在您的方法之前添加:\ JList<?>

  • 如果您想将列表项目作为字符串,只需投放&#39;值&#39; - 参数,例如:
    @SuppressWarnings("rawtypes")