知识点:JList和JTable的正确使用应该是插入在滚动窗体中
package com.bn;
import java.sql.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.table.*;
import javax.swing.event.*;
public class DBManager extends JFrame//窗体
implements ListSelectionListener//实现列表选择监听接口
{
Vector v,vdata=new Vector(),
vcolumn=new Vector();//每个列的信息
JList jl;
JScrollPane zs,ys;//分成左右两个部分
JSplitPane js;//负责把窗体左右分开
JTable jt;//右侧显示数据的位置
DefaultTableModel df;//默认的表格模型,负责向JTable表格控件提供数据
Connection con;//数据库连接
public DBManager()
{
super("数据库管理");
Container c=this.getContentPane();//窗体容器
c.setLayout(new GridLayout(1,1));//1*1的网格布局
this.getConnection();//获取数据连接
jl=new JList(v);//列表
zs=new JScrollPane(jl);//
df=new DefaultTableModel(vdata,vcolumn);//参数(数据,当前列的信息)
jt=new JTable(df);
ys=new JScrollPane(jt);
js=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,zs,ys);//窗体分割(表示水平分割,左侧滚动窗体,右侧..)
c.add(js);//把js添加到窗体的1*1网格中
js.setDividerLocation(150);//分割条的位置
js.setDividerSize(4);//分割条的宽度
this.setBounds(100,100,600,400);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jl.addListSelectionListener(this);//添加改变列表选择监听
}
public void valueChanged(ListSelectionEvent e)//监听的方法
{
try
{
this.vdata.removeAllElements();//清空数据
ResultSet rs; //结果集
Statement st=con.createStatement();//创建语句
rs=st.executeQuery("select * from "+jl.getSelectedValue().toString().trim());//执行查询,当前选中表名中的数据
ResultSetMetaData rsmd=rs.getMetaData();//获取结果集的元数据
int columnsCount=rsmd.getColumnCount();//获得结果集的列
this.vcolumn.removeAllElements();//删除所有的列的信息
for(int i=1;i<=columnsCount;i++)//遍历当前表的每一个列,获得列名
{
this.vcolumn.add(rsmd.getColumnName(i));
}
while(rs.next())//遍历每一行的数据
{
Vector temp=new Vector();//存放一行的数据
for(int i=1;i<=columnsCount;i++)//遍历结果集的每一个列、获得数据
{
temp.add(rs.getString(i));
}
this.vdata.add(temp);//存放每一行数据的向量
}
this.df.setDataVector(this.vdata,this.vcolumn);//更新数据
}
catch(Exception ez)
{
ez.printStackTrace();
}
}
public void getConnection()
{
v=new Vector();
try
{
Class.forName("org.gjt.mm.mysql.Driver");
this.con=DriverManager.getConnection
(
"jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=UTF-8",
"root",
""
);
DatabaseMetaData dm=con.getMetaData();//获取数据库元数据
ResultSet rs=dm.getTables(null,null,null,new String[]{"TABLE"});
while(rs.next())
{
v.add(rs.getString(3));//把表名放到第一块里
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
public static void main(String args[])
{
new DBManager();
}
}