我正在做一个题库查询系统,现在其他部分大体完成,就是在如何将查询结果在jlist上正确显示,以及为每一条目添加监听器以便于随时对题目进行编辑并实现数据库的实时更新上面很头痛,希望高手能指点一下,谢谢。以下是jlist初始化类,注释在程序中...public class InitJlistAction_Frame implements ActionListener{
    private DBHandler db = new DBHandler();//这是数据库控制类,所有的查询操作在这里完成
    private QueryBibleFrame q_window;//QueryBibleFrame是选择题目查询参数的Frame类,q_window用来传递查询参数
    private Frame1 f_window;//jlist初始化完毕后要在Frame1这个主窗口中显示
    public InitJlistAction_Frame(QueryBibleFrame q_window,Frame1 f_window) {
        this.q_window = q_window;
        this.f_window = f_window;
    }    public void actionPerformed(ActionEvent e) {
        try {
            ResultSet rs = null;
            String Cname = (String)this.q_window.jComboBox1.getSelectedItem();
            String Kcon = (String)this.q_window.jComboBox2.getSelectedItem();
            String Type = (String)this.q_window.jComboBox3.getSelectedItem();
            String Key = (String)this.q_window.jTextField1.getText();//获取参数            if (!db.validate(4,Cname)) {//validate方法用来判断课程Cname下是否存在知识点项,参数4决定判断内容,与本问题无关
                JOptionPane.showMessageDialog(null,"该课程下尚未添加知识点,建议先添加知识点项后再进行相关操作!");
                return;
            }
            if (Kcon=="*"){Kcon = "%";}
            if (Type=="*"){Type = "%";}//用户选择参数*表示全选,所以打算用"... like %"来实现,与本问题无关
            if (Key!=""){
                rs = db.getBible(1,Cname,Kcon,Type,Key);
            }
            else {
                rs = db.getBible(2,Cname,Kcon,Type,"");
            }//key是题目关键字,用户可不填写,参数1和2也是为了区别应该执行哪条查询语句,与本题无关            if (checkResult(rs)){//判断查询结果是否为空
                rs.beforeFirst();
                this.f_window.jScrollPane1.getViewport().add(this.f_window.jList1);
                this.f_window.jScrollPane1.getViewport().setView(this.f_window.jList1);//添加jlist
                DefaultListModel dtm = new DefaultListModel();//关键在以下这几行,不知道这样初始化好不好,有没有更好的方式
                while (rs.next()){
                    Vector v = new Vector();
                    v.add(rs.getString(1));
                    v.add(rs.getString(2));
                    dtm.addElement(v);
                    this.f_window.jList1.setPreferredSize(new Dimension(500,200));//这里想设置一下jlist的长度宽度,但用了似乎不管用...
                }
                this.f_window.jList1.setModel(dtm);            }
            else {
                JOptionPane.showMessageDialog(null,"该查询条件下没有找到任何题目!");
                return;
            }
        }
        catch (Exception ex) {
            ex.printStackTrace();
        }    }
    private boolean checkResult(ResultSet rs){
        try{
            ResultSet check = rs;
            int i = 0;
            while (check.next()) {
                i++;
            }            if (i > 0) {
                return true;
            } else {
                return false;
            }
        }
        catch (Exception ex){
                ex.printStackTrace();
        }
        return false;
    }
}
下面是问题:1.关于jlist的长度宽度...现在显示的结果是长度很长,宽度很低,我想设置一下让宽度变宽一些,并且查询结果能够在jlist上自动换行,也就是限定长度。不知应该如何做到...
2.再接下来我要在每一条目上添加监听器,用户双击后将把双击的条目内容初始化到另外的一个frame上,以便进行编辑,并且可以在jlist上同步更新,数据库更新方面不用考虑,我有其他的类来实现。问题是这几步涉及到大量的对查询结果集rs的操作,我想问一下有没有更好的方法使对rs的操作减少(毕竟读取rs的特定行和列比较麻烦),同时不影响数据库更新时对rs的使用。比如有没有这样的二维组件,可以将rs的内容全部存入其中,然后可以方便操作,同时又可以进行数据库同步更新(此时可以用rs,那个组件可以没有数据库更新功能)。

解决方案 »

  1.   

    我没试过,但可以试试在f_window中初始化jList1时(或者赋值之后)设定一下size或width,
    而不是像现在这样,在每个while (rs.next())循环里都设定。
      

  2.   

    >>trumf恩,刚刚试了试确实可以用setFixedCellWidth()和setFixedCellHeight()来设置,现在想知道单元格中的内容应该如何排版,目前的样子是内容(字符串)全是五号字体且在单元格中央排列。还有就是那个while循环里的设置是我疏忽了...本来是想放到外面的...呵呵...
    现在要去上课了,所以楼下的高手们还是帮忙看一下然后我回来回复......
    现在最想知道的是有没有这样的组件:可以接收rs所有内容,可以像字符串数组那样方便的调用内容,最重要的是能够将组件更新后的内容同步更新到rs中,以便更新数据库,如果有的话帮忙指点一下,jdk中有的或者自己写的都可以,或者对jdk中已有的类似组件(Vector之类)进行改进贴一下代码......谢谢...
      

  3.   

    DBSwing?
    没用过.或许可以满足LZ的要求