listmodel中的元素类型

时间:2014-08-30 16:02:14

标签: java swing jdbc jlist defaultlistmodel

我已将自定义ListModel定义为包含某些数据的其他类的内部类。要填充ListModel,我查询数据库文件并选择其中的数据,如下面的代码段所示。在JList使用中,一切都很好看 这个ListModel

我不明白的是“使用未经检查或不安全的操作”。当我用-Xlint编译时,我收到警告: “缺少泛型类DefaultListModel<E>的类型参数”

我的问题是我的代码第一行中的<E>

public class SalListModel extends DefaultListModel<E=?>{

    String defaultSearch="*";
    String salName=defaultSearch;

    //inner class constructor
    public SalListModel(){

        try{

                //connection creates the database if it does not exist
                Class.forName("org.sqlite.JDBC");
                Connection c=
                    DriverManager.getConnection("jdbc:sqlite:"+dbfile);
                Statement st=c.createStatement();

                String sql;
                sql="select "+salName+" from "+tablename+
                    " ORDER BY "+name[0]+" ASC;"; //alphabetical order
                ResultSet rs=st.executeQuery(sql);

                while (rs.next()){
                     addElement(rs.getString(name[0])+" "+rs.getString(cnp[0]));
                }

                rs.close();
                st.close();
                c.close();
        }
        catch (ClassNotFoundException cnfe){
                 System.out.println("SQL SalListModel class not found: "+
                             cnfe.getMessage());
        }
        catch (SQLException sqle){
                System.out.println("SalListModel SQL exception:"+
                             sqle.getMessage());
        }
    }
}

1 个答案:

答案 0 :(得分:3)

  

我已经定义了一个自定义ListModel

为什么呢?您没有向模型添加任何新功能。将数据加载到模型中不应被视为新功能。只需在类中创建一个方法即可将数据加载到模型中。然后你的代码就像:

ListModel<String> model = new DefaultListModel<String>();
addDataToModel( model );
  

我的问题是我的代码第一行中的<E>

您正在向模型添加String数据,因此您应该使用DefaultListModel<String>