我正在尝试在我的jtable中获取信息并阅读mysql的信息,看来我可以看到我的时代来自这个部分,因为我可以看到我不知道该怎么办,现在我有一个DefaultTableModel,它定义了JTable将使用的方法,并且我正在覆盖GetColumnClass,我希望我的代码从班级中获得柱子。
static DefaultTableModel TableModel = new DefaultTableModel(dataInfo, columns){
public Class getColumnClass(int column) {
if ((column >= 0) && (column < getColumnCount())) {
returnValue = getValueAt(0, column);
} else {
returnValue;
}
};
如果我清楚地了解您,则需要添加.getClass方法,该方法有助于将变量获取到左侧,您还必须返回类的值如下所示。在每一列中进行第一个条目。希望能帮助到你。假设您的列没有零。
static DefaultTableModel TableModel = new DefaultTableModel(dataInfo, columns){
public Class getColumnClass(int column) {
Class returnValue;
// Verifying that the column exists (index > 0 && index < number of columns
if ((column >= 0) && (column < getColumnCount())) {
returnValue = getValueAt(0, column).getClass();
//you need to add the .getclass method which
//gets the variable to the left.
} else {
// Returns the class for the item in the column
returnValue = Object.class;
}
return returnValue;
}
};
我们需要稍微修改TableModel
,因此我们可以控制列Class
类型...
public class MyTableModel extends DefaultTableModel {
private List<Class> columnTypes;
public MyTableModel() {
}
public MyTableModel(int rowCount, int columnCount) {
super(rowCount, columnCount);
}
public MyTableModel(Vector columnNames, int rowCount) {
super(columnNames, rowCount);
}
public MyTableModel(Object[] columnNames, int rowCount) {
super(columnNames, rowCount);
}
public MyTableModel(Vector data, Vector columnNames) {
super(data, columnNames);
}
public MyTableModel(Object[][] data, Object[] columnNames) {
super(data, columnNames);
}
public MyTableModel(List<Class> columnTypes) {
this.columnTypes = columnTypes;
}
public MyTableModel(List<Class> columnTypes, Object[] columnNames, int rowCount) {
super(columnNames, rowCount);
this.columnTypes = columnTypes;
}
public MyTableModel(List<Class> columnTypes, Object[][] data, Object[] columnNames) {
super(data, columnNames);
this.columnTypes = columnTypes;
}
public MyTableModel(List<Class> columnTypes, Vector data, Vector columnNames) {
super(data, columnNames);
this.columnTypes = columnTypes;
}
public MyTableModel(List<Class> columnTypes, Vector columnNames, int rowCount) {
super(columnNames, rowCount);
this.columnTypes = columnTypes;
}
public MyTableModel(List<Class> columnTypes, int rowCount, int columnCount) {
super(rowCount, columnCount);
this.columnTypes = columnTypes;
}
public void setColumnTypes(List<Class> columnTypes) {
this.columnTypes = columnTypes;
}
@Override
public Class<?> getColumnClass(int columnIndex) {
return columnTypes.get(columnIndex);
}
}
然后,我们从数据库中加载数据,可以使用ResultSet
中的ResultSetMetaData
来确定列代表的最合适类型的对象(基于ResultSet#getObject
的返回结果)
MyTableModel tableModel = new MyTableModel();
try (ResultSet rs = ...) {
ResultSetMetaData rsmd = rs.getMetaData();
List<Class> columnTypes = new ArrayList<Class>(rsmd.getColumnCount());
for (int column = 0; column < rsmd.getColumnCount(); column++) {
String className = rsmd.getColumnClassName(column + 1);
try {
columnTypes.add(Class.forName(className));
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
columnTypes.add(Object.class);
}
}
tableModel.setColumnTypes(columnTypes);
// Load data from the ResultSet
} catch (SQLException exp) {
exp.printStackTrace();
}
有关更多详细信息,请参见JDBC数据库访问...