论坛首页 Java企业应用论坛

JComboBox下拉框弹出JTable问题

浏览 4587 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (3)
作者 正文
   发表时间:2011-08-14  
刚开始学java一个多月.问题可能比较弱智请大家原谅

主要是制作一个JComboBox下拉框弹出JTable,并且可以实现查询功能
1.制作一个JComboBox,并可以从数据库取出值
2.使JComboBox实现查询功能
3.JComboBox弹出JTable完成.

第一步 制作一个JComboBox,并可以从数据库取出值
出现问题了,感觉是基础的问题.自己写了个JComboBox,但是从数据库取出的每个值都加了[**]还有一个@d8876的乱码(怀疑是列名).代码如下,请高手指出错误.错误纠正后准备放入jtable完善功能.谢谢!!
代码如下:
界面
public class liebiao extends JFrame {
    private JComboBox jcbx;
    private JPanel jP1;
    private JLabel jlb1;
    private List list1;
    private Vector vct;

    private String sql = "select UserName 登陆名  FROM tblSysUser where 1=?";
    private String[] paras = { "1" };

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        liebiao lb = new liebiao();
    }

    public liebiao(){
        
        
        
        jP1 =new JPanel();
        jlb1 =new JLabel("选择下拉框");
        jcbx =new JComboBox();
        //getJComboBox();
        //设置JComboBox
        jcbx.removeAllItems();
        jcbx.addItem("选择");
        listmodel lh =new listmodel();
        lh.listquery(jcbx ,sql, paras);
        jcbx.addItem(lh);
        jcbx.setEditable(true);
        
        jcbx.addItemListener(new ItemListener() {
            
            public void itemStateChanged(ItemEvent e) {
                
                        
    
        }
        
        }    
);
        
        
        jP1.add(jlb1);
        jP1.add(jcbx);
        
        this.add(jP1);
        
        
        this.setSize(1024, 768);
        // 窗口居中显示
        this.setLocationRelativeTo(null);
        // 退出的时候关闭,保证程序退出,比较重要,不关闭那么就停留在内存当中影响运行速度.
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // 显示窗体
        this.setVisible(true);
        
    }
}


数据驱动模型
package list;



import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;

import javax.swing.JComboBox;
import javax.swing.table.AbstractTableModel;




public class listmodel extends AbstractTableModel{
    
    
    
    private Vector columns;
    

    public  void listquery(JComboBox jcbx ,String sql,String[] paras) {
        
        listhelp sh = new listhelp();
        ResultSet rs = sh.query(sql, paras);
        columns = new Vector();
    
        //此方法便 于扩展
        try {
            //从rs对象中可以得到一个ResultSetMetaData
            ResultSetMetaData rsmd = rs.getMetaData();
            for(int i=0;i<rsmd.getColumnCount();i++) {
                columns.add(rsmd.getColumnName(i+1));
            }
            //把rs的结果放到rowDate
            while(rs.next()) {
                Vector temp = new Vector();
                for(int i=0;i<rsmd.getColumnCount();i++) {
                    temp.add(rs.getString(i+1));
                }
                jcbx.addItem(temp);
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    @Override
    public int getColumnCount() {
        // TODO Auto-generated method stub
        return this.columns.size();
    }

    @Override
    public String getColumnName(int column) {
        // TODO Auto-generated method stub
        return (String)columns.get(column);
    }

    @Override
    public int getRowCount() {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        // TODO Auto-generated method stub
        return null;
    }

}


dbhelp
package list;
/*
* 对数据库操作的类
* 对数据库的操作,就是crud
* 调用存储过程
* 
*注意:如果连接数据库时出现如下异常则表示未引入三个JAR驱动包,另外一个原因就是SQL语句有语法错误
*java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDviver
* */
import java.util.*;
import java.sql.*;
public class listhelp {
    
    //定义操作数据库需要的东西
    PreparedStatement ps=null;
    Connection  ct=null;
    ResultSet rs=null;    


    String driver="com.microsoft.sqlserver.jdbc.SQLServerDriver";
    String url="jdbc:sqlserver://127.0.0.1:1433;databaseName=test";
    String user="sa";
    String passwd="123456";
     
    
    //构造函数
    public listhelp(){
        
        try {
            //加载驱动
            Class.forName(driver);
            //得到连接
            ct=DriverManager.getConnection(url,user,passwd);
             System.out.println("成功加载驱动,成功连接服务器");
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    //[]paras,通过?赋值方式可以防止漏洞注入方式,保证安全性
        
    public ResultSet query(String sql,String []paras)
    {
        try {
            ps=ct.prepareStatement(sql);
            //对sql的参数赋值
            for(int i=0;i<paras.length;i++)
            {
                ps.setString(i+1, paras[i]);
            }
            //执行查询
            rs=ps.executeQuery();// 执行更新并返回操作数据库行数
        } catch (Exception e) {
            e.printStackTrace();
            // TODO: handle exception
        }
        System.out.println("rs="+rs);
        //返回结果集
        return rs;
    }    
    //关闭资源的方法
    public void close()
    {
        try {
            if(rs!=null) rs.close();
            if(ps!=null) ps.close();
            if(ct!=null) ct.close();
        } catch (Exception e) {
            e.printStackTrace();
            // TODO: handle exception
        }
    }
}
   发表时间:2011-08-31  
看你的代码看得好不爽,类名都小写,不习惯
0 请登录后投票
   发表时间:2011-09-01  
先从规范做起
0 请登录后投票
   发表时间:2011-11-26  
重写toString()
或者实现已的Renderer
0 请登录后投票
   发表时间:2011-12-16  
推荐采用弹出窗口的方式
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics