Java中,JTable如何在在创建表时,只指定列名称和列对应的数据类型,而不用预先设置初始数据?
目前的建JTable需求如下:1、表有3列,列名称依次为:序号,文件路径,处理结果2、这3列的数据类型依次为:int,String,String3、刚开始还没处理时,JT...
目前的建JTable需求如下:
1、表有3列,列名称依次为:序号,文件路径, 处理结果
2、这3列的数据类型依次为:int, String, String
3、刚开始还没处理时,JTable中是没有数据的。
4、在执行文件处理时,每处理一个文件,就将返回一个Object[] result,包含了序号,文件路径,处理结果。再将result按行添加到JTable中。
5、序号列以数值进行排序,文件路径和处理结果,以字符串顺序进行排序。
目前的疑问如下:
1、如果在JTable建表时,只指定列名称和列对应的数据类型,而不用预先设置初始数据?
2、使用DefaultTableModel(Object[] columnNames,
int rowCount)构造方法时,不预先设置初始数据,则出现空指针错误,原因在于重写了获取表格中的数据类型,以满足需求5的根据不同数据类型进行相关的排序。
重写代码如下:
public Class<?> getColumnClass(int columnIndex) {
return getValueAt(0,columnIndex).getClass();
}
此时,由于表格中没有初始数据,所以获取数据类型的过程中,没有数据, 所以出现空指针异常。这个要如何解决?
3、如何让JTable在数据为空时,只显示列名称?在有数据时,才显示数据。 展开
1、表有3列,列名称依次为:序号,文件路径, 处理结果
2、这3列的数据类型依次为:int, String, String
3、刚开始还没处理时,JTable中是没有数据的。
4、在执行文件处理时,每处理一个文件,就将返回一个Object[] result,包含了序号,文件路径,处理结果。再将result按行添加到JTable中。
5、序号列以数值进行排序,文件路径和处理结果,以字符串顺序进行排序。
目前的疑问如下:
1、如果在JTable建表时,只指定列名称和列对应的数据类型,而不用预先设置初始数据?
2、使用DefaultTableModel(Object[] columnNames,
int rowCount)构造方法时,不预先设置初始数据,则出现空指针错误,原因在于重写了获取表格中的数据类型,以满足需求5的根据不同数据类型进行相关的排序。
重写代码如下:
public Class<?> getColumnClass(int columnIndex) {
return getValueAt(0,columnIndex).getClass();
}
此时,由于表格中没有初始数据,所以获取数据类型的过程中,没有数据, 所以出现空指针异常。这个要如何解决?
3、如何让JTable在数据为空时,只显示列名称?在有数据时,才显示数据。 展开
1个回答
展开全部
首先,不知道你是用的什么模式开发,建议使用mvc模式;
我以学生管理系统为例:
创建JTable jt=new JTable(sm); 其中sm是public class StuModel extends AbstractTableModel的对象,此时在StuModel类中你要重写public int getRowCount(),public int getColumnCount() ,public Object getValueAt(int rowIndex, int columnIndex),public String getColumnName(int column)这四个方法(具体不懂再追问),主要是继续在这个类中创建一个查询方法即:
public boolean querystu(String sql,String date[])//有没有返回值都行
{
boolean b=true;
OpDatabase od=new OpDatabase();//这是专门操作数据库的类
try {
ResultSet rs=od.querybase(sql, date);//调用查询方法,返回rs结果集
while(rs.next())//取出rs结果集中的内容,如果没用结果则不进入,rowData.size()就为0;
{
Vector stu=new Vector();
stu.add(rs.getString(1));
stu.add(rs.getString(2));
stu.add(rs.getInt(3));
stu.add(rs.getString(4));
stu.add(rs.getString(5));
stu.add(rs.getString(6));
rowData.add(stu);//给行添加数据
}
} catch (Exception e) {
b=false;
e.printStackTrace();
}finally
{
od.close();//关闭资源
}
return b;
}
有不懂的再追问!
我以学生管理系统为例:
创建JTable jt=new JTable(sm); 其中sm是public class StuModel extends AbstractTableModel的对象,此时在StuModel类中你要重写public int getRowCount(),public int getColumnCount() ,public Object getValueAt(int rowIndex, int columnIndex),public String getColumnName(int column)这四个方法(具体不懂再追问),主要是继续在这个类中创建一个查询方法即:
public boolean querystu(String sql,String date[])//有没有返回值都行
{
boolean b=true;
OpDatabase od=new OpDatabase();//这是专门操作数据库的类
try {
ResultSet rs=od.querybase(sql, date);//调用查询方法,返回rs结果集
while(rs.next())//取出rs结果集中的内容,如果没用结果则不进入,rowData.size()就为0;
{
Vector stu=new Vector();
stu.add(rs.getString(1));
stu.add(rs.getString(2));
stu.add(rs.getInt(3));
stu.add(rs.getString(4));
stu.add(rs.getString(5));
stu.add(rs.getString(6));
rowData.add(stu);//给行添加数据
}
} catch (Exception e) {
b=false;
e.printStackTrace();
}finally
{
od.close();//关闭资源
}
return b;
}
有不懂的再追问!
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询