[英]Change Column Type of jtable when table populate from resultset
我有工人從下面的結果集中填充jtable;
public class WorkerFillTable extends SwingWorker<DefaultTableModel, DefaultTableModel> {
private DefaultTableModel modeltable;
public WorkerFillTable(DefaultTableModel modeltable) {
this.modeltable = modeltable;
}
@Override
protected DefaultTableModel doInBackground() throws Exception {
ResultSet rs;
Statement stmt;
String query = "select Name,ID,Status,IsActive from current_conf\n" +
"order by Name,ID";
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
String connectionUrl = "jdbc:sqlserver://192.168.130.100;" + "databaseName=DBST;" + "user=" + "user1" + ";" + "password=" + "userpass1" + ";";
Connection con = DriverManager.getConnection(connectionUrl);
stmt = con.createStatement();
rs = stmt.executeQuery(query);
ResultSetMetaData rsmd = rs.getMetaData();
Vector<String> columnNames = new Vector<String>();
int columnCount = rsmd.getColumnCount();
for (int column = 0; column < columnCount; column++) {
columnNames.addElement(rsmd.getColumnLabel(column + 1));
}
Vector<Vector<Object>> data = new Vector<Vector<Object>>();
while (rs.next()) {
Vector<Object> vector = new Vector<Object>();
for (int columnIndex = 1; columnIndex <= columnCount; columnIndex++) {
vector.add(rs.getObject(columnIndex));
}
data.add(vector);
}
rs.close();
stmt.close();
modeltable = new DefaultTableModel(data, columnNames);
return modeltable;
}
@Override
protected void done() {
try {
TableModel modeltable = get();
sorter = new TableRowSorter(modeltable);
cTable.setRowSorter(sorter);
cTable.setModel(modeltable);
} catch (InterruptedException | ExecutionException ex) {
}
}
}
但是所有列都以String形式出現。 DB的“ IsActive”列有點只有“ 1”或“ 0”。Jtable將這些列顯示為“ true”或“ false”。我需要在jtable中編輯最后一列的排字。 我該怎么做 ?
擴展AbstractTableModel
JDBCAdapter
說明了關系數據庫和Java數據類型之間的典型映射。 在這里可以看到它,可以在samples/demo/jfc/TableExample
中找到完整的示例,該示例位於Java SE開發工具包8u25演示和示例下載中 。 概括來說,
覆蓋getColumnClass()
。
從ResultSetMetaData
獲取列的數據type
。
使用switch(type)
返回正確的type-token 。
還可以考慮使用SwingWorker<Row, Row>
在publish()/process()
獲得更精細的粒度。
我建議您使用AbstractTableModel的子類並重寫getColumnClass方法為JTable設置正確的數據類型。
public class CustomTableModel extends AbstractTableModel
{
@Override
public int getRowCount()
{
}
@Override
public int getColumnCount()
{
}
@Override
public Object getValueAt(int rowIndex, int columnIndex)
{
}
@Override
public String getColumnName(int index)
{
}
@Override
public Class<String> getColumnClass(int i)
{
//return the Specific class for each column based on index i
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.