JComboBox下拉框弹出JTable可以实现吗? 效果如上图,JComboBox下拉框弹出JTable,并且可以实现查询 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可以是可以 不过你得重写不止一个两个方法 甚至还涉及到重写 ComboBoxModel等有关的类也许你可以尝试给JTextField添加点击事件弹出一个框 显示table然后点击了就放到text里面 可以的,在itemStateChanged事件创建个Jtable么 自己写一个。继承JComboBox 比自己写一个都费事。Swing Hacks里有个下拉出一个颜色选择窗口的例子可以参考。 出现问题了,感觉是基础的问题.自己写了个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 } }} 默认的渲染器使用默认的toString。需要你自己重写toString方法 学java一个多月时间,有的问题比较弱智请大家原谅.完全自学的,主要看视频准备分步完成1.制作一个JComboBox,并可以从数据库取出值 2.使JComboBox实现查询功能 3.JComboBox弹出JTable完成. 现在第一步出现乱码问题.一步一步完成. 已解决:解决乱码问题.输入关键字回车后可以从下拉框显示.求::查询输入关键字后提取关键字相似项目并排序到第一位.主界面package list;import java.awt.event.ItemEvent;import java.awt.event.ItemListener;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.util.Iterator;import java.util.List;import java.util.Vector;import javax.swing.ComboBoxEditor;import javax.swing.ComboBoxModel;import javax.swing.DefaultComboBoxModel;import javax.swing.JComboBox;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JTextField;import list.listmodel;import list.listhelp;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" }; String defaultMessage="请选择"; 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 List listinfo = listmodel.findList(sql, paras); jcbx.removeAllItems(); Iterator iter = listinfo.iterator(); while(iter.hasNext()){ List a =(List)iter.next(); jcbx.addItem(a.get(0)); } jcbx.setEditable(true); ComboBoxEditor editor=jcbx.getEditor(); jcbx.configureEditor(editor,defaultMessage); jcbx.getEditor().getEditorComponent().addKeyListener(new KeyListener() { @Override public void keyTyped(KeyEvent e) { // TODO Auto-generated method stub } @Override public void keyReleased(KeyEvent e) { // TODO Auto-generated method stub String str = jcbx.getEditor().getItem().toString(); if (str.length() == 0){ System.out.println("请输入客户简称"); return; }else if (str.length() > 0) { if (str != null) { try { jcbx.showPopup(); } catch (Exception ex) { ex.printStackTrace(); } } } } @Override public void keyPressed(KeyEvent e) { // TODO Auto-generated method stub } }); 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); } }listmodepackage list;import java.sql.Connection;import java.sql.PreparedStatement;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 rowDate,columns; public static List findList(String sql,String[] paras) { List<List> list = new ArrayList<List>(); listhelp sh = new listhelp(); ResultSet rs = sh.query(sql, paras); try { ResultSetMetaData metaData = rs.getMetaData(); int colCount = metaData.getColumnCount(); System.out.println("colCount==="+colCount); while (rs.next()) { List<String> row = new ArrayList<String>(); for (int i = 1; i <= colCount; i++) { String str = rs.getString(i); if (str != null && !str.isEmpty()) str = str.trim(); row.add(str); System.out.println("str==="+str); } list.add(row); System.out.println("row==="+row); System.out.println("list==="+list); } } catch (Exception e) { e.printStackTrace(); } return list; } // public static Vector getUsers() {// // Vector listinfo =findForList(sql1, paras1);// return listinfo;// } public void listquery(String sql,String[] paras) { listhelp sh = new listhelp(); ResultSet rs = sh.query(sql, paras); columns = new Vector(); rowDate = 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)); } rowDate.add(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 int getRowCount() { // TODO Auto-generated method stub return this.rowDate.size(); } @Override public Object getValueAt(int rowIndex, int columnIndex) { // TODO Auto-generated method stub return ((Vector)rowDate.get(rowIndex)).get(columnIndex); } public String getColumnName(int column) { // TODO Auto-generated method stub return (String)columns.get(column); }}dbhelppackage 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 } }} help! java做的socket服务端接收不到http的请求数据 大家帮我看看这段代码,应该怎样修改? 从命令提示符里接受一个整数 解析xml文件问题,帮忙看看 (急-在线等)问一个类型转换问题 JDBC事务处理问题 简单问题:怎理解Connection conn=DriverManager.getConnection();这句 jdk怎么用啊! 编译源文件失败!!!!!! 求助java类库电子资料,来着有分 java.lang.NoSuchMethodError: main Exception in thread "main" 三元运算符 判断性别?
也许你可以尝试给JTextField添加点击事件弹出一个框 显示table然后点击了就放到text里面
继承JComboBox 比自己写一个都费事。
Swing Hacks里有个下拉出一个颜色选择窗口的例子可以参考。
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
}
}
}
需要你自己重写toString方法
准备分步完成
1.制作一个JComboBox,并可以从数据库取出值
2.使JComboBox实现查询功能
3.JComboBox弹出JTable完成. 现在第一步出现乱码问题.一步一步完成.
求::查询输入关键字后提取关键字相似项目并排序到第一位.主界面
package list;import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;import java.util.Iterator;
import java.util.List;
import java.util.Vector;import javax.swing.ComboBoxEditor;
import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import list.listmodel;
import list.listhelp;
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" };
String defaultMessage="请选择"; 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
List listinfo = listmodel.findList(sql, paras);
jcbx.removeAllItems();
Iterator iter = listinfo.iterator();
while(iter.hasNext()){
List a =(List)iter.next();
jcbx.addItem(a.get(0));
}
jcbx.setEditable(true);
ComboBoxEditor editor=jcbx.getEditor();
jcbx.configureEditor(editor,defaultMessage);
jcbx.getEditor().getEditorComponent().addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
String str = jcbx.getEditor().getItem().toString();
if (str.length() == 0){
System.out.println("请输入客户简称");
return;
}else if (str.length() > 0) {
if (str != null) {
try {
jcbx.showPopup();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
}
@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
}
});
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);
}
}listmode
package list;import java.sql.Connection;
import java.sql.PreparedStatement;
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 rowDate,columns;
public static List findList(String sql,String[] paras) {
List<List> list = new ArrayList<List>();
listhelp sh = new listhelp();
ResultSet rs = sh.query(sql, paras);
try {
ResultSetMetaData metaData = rs.getMetaData();
int colCount = metaData.getColumnCount();
System.out.println("colCount==="+colCount);
while (rs.next()) {
List<String> row = new ArrayList<String>();
for (int i = 1; i <= colCount; i++) {
String str = rs.getString(i);
if (str != null && !str.isEmpty())
str = str.trim();
row.add(str);
System.out.println("str==="+str);
}
list.add(row);
System.out.println("row==="+row);
System.out.println("list==="+list);
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
// public static Vector getUsers() {
//
// Vector listinfo =findForList(sql1, paras1);
// return listinfo;
// } public void listquery(String sql,String[] paras) {
listhelp sh = new listhelp();
ResultSet rs = sh.query(sql, paras);
columns = new Vector();
rowDate = 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));
}
rowDate.add(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 int getRowCount() {
// TODO Auto-generated method stub
return this.rowDate.size();
} @Override
public Object getValueAt(int rowIndex, int columnIndex) {
// TODO Auto-generated method stub
return ((Vector)rowDate.get(rowIndex)).get(columnIndex);
}
public String getColumnName(int column) {
// TODO Auto-generated method stub
return (String)columns.get(column);
}}
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
}
}
}