浏览 4588 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (3)
|
|
---|---|
作者 | 正文 |
发表时间:2011-08-14
主要是制作一个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 } } } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-08-31
看你的代码看得好不爽,类名都小写,不习惯
|
|
返回顶楼 | |
发表时间:2011-09-01
先从规范做起
|
|
返回顶楼 | |
发表时间:2011-11-26
重写toString()
或者实现已的Renderer |
|
返回顶楼 | |
发表时间:2011-12-16
推荐采用弹出窗口的方式
|
|
返回顶楼 | |