SWING很好用,但是SWING里的表格确实比较难搞的。第一次用SWING的表格输出数据库的信息的时候出乎了我的意料之外。以下就是我个人使用SWING的表格的心得。
首先,我们先讨论在SWING中如何创建表格。创建表格有几个不同的构建方法:
JTable() |
JTable(int numRows, int numColumns) |
JTable(Object[][] rowData, Object[] columnNames) |
JTable(TableModel dm) |
JTable(TableModel dm, TableColumnModel cm) |
JTable(TableModel dm, TableColumnModel cm, ListSelectionModel sm) |
JTable(Vector rowData, Vector columnNames) |
在这次试验当中我所使用的是JTable(Object[][] rowData, Object[] columnNames)方法。其中rowData是二维的数组包含的是表格的各个单元格的内容,columnNames是一个包含表格列名的数组。往往我们从数据库中输出数据的时候列是固定的,当时行却不是固定的。所以要输出数据关键在于把rowData与数据库的操作结合在一起。所以算法还是得要自己来写,这相当麻烦,开发效率由此也就会降低了。
在这个工程中有2个文件。一个是表现层文件mywindow.java即显示的主窗口,一个是业务逻辑文件MySqlCon.java主要是用于和数据库的操作。
mywindow.java文件的代码在这里就不多说了,代码大多是系统自动生成的,就是在该文件中添加一个调用MySqlCon.java的方法:
MySqlCon m=new MySqlCon(frame);//传递一个JFrame对象到业务逻辑文件中
m.selectLog();//该方法接受数据库信息并创建表格的方法
下面主要讲解MySqlCon.java
以下是核心代码:
//创建表格和获取数据库信息的方法
public void selectLog() {
//创建一个二维的对象数组,数组的行数由方法getNum()可得到,也就是表中的记录数量。数组的
//列是根据表已经固定了的。这样二维数组就可以与数据表具有一致性了
Object[][] row = new Object[getNum()][5];
int i = -1;//初始化计数器,用于记录行的记录
try {
BulidCon();//调用数据库的方法,在这没给出
rs = stmt.executeQuery("select * from cont");
while (rs.next()) {//进入循环体
i++;//当前的表格行的序号
for (int j = 0; j < 5; j++) {//进入列的循环体,按顺序给列添加值
row[i][j] = rs.getString(j + 1);//取出数据的第i行第j+1列的值添加到二//维数组中
}
}
//构造表格的列的名称
String[] name = { "ID", "tid", "title", "content", "ather" };
//创建一个滚动条容器,是表格的容器
final JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(120, 130, 350, 100);
jf.getContentPane().add(scrollPane);
//创建一个表格,按照上面定好的参数
JTable table = new JTable(row, name);
table.setEnabled(false);//表格为不可编辑
table.setRowHeight(20);//行高为20px
scrollPane.setViewportView(table);
//将表格添加到滚动条容器中,使表格带有滚动条了
} catch (Exception e) {
System.out.println(e.toString());
}
}
//铺助的方法,用于统计表中的记录个数
public int getNum() {
int i = 0;
try {
BulidCon();
rs = stmt.executeQuery("select count(*) as num from cont");
rs.next();
i = Integer.parseInt(String.valueOf(rs.getInt("num")));
} catch (Exception e) {
System.out.println(e.toString());
}
return i;
}
该方法是可以达到了把数据库的信息以表格的形式在SWING界面里显示了,但是还有个遗留的问题。表格的列宽还是无法设置固定的大小。目前暂不研究。