Я создаю проект Java Swing, который преобразует журналы Tomcat Access в столбцы базы данных, и пользователь может анализировать журналы с помощью SQL -запросов. Я использую JTable для отображения столбцов журнала доступа.
Код: Выделить всё
JTableКод: Выделить всё
public static void reOrderColumn(TableColumnModel newColumnModel, TableColumnModel oldColumnModel) {
try {
if(oldColumnModel.getColumnCount()==0){
return;
}
// Step 1: Map new columns by header name
Map newColsByName = new HashMap();
for (int i = 0; i < newColumnModel.getColumnCount(); i++) {
TableColumn col = newColumnModel.getColumn(i);
newColsByName.put(col.getHeaderValue().toString(), col);
}
// Step 2: Build list in old order
List reordered = new ArrayList();
for (int i = 0; i < oldColumnModel.getColumnCount(); i++) {
String name = oldColumnModel.getColumn(i).getHeaderValue().toString();
TableColumn col = newColsByName.get(name);
if (col != null) {
reordered.add(col);
}
}
// Step 3: Remove all columns
while (newColumnModel.getColumnCount() > 0) {
newColumnModel.removeColumn(newColumnModel.getColumn(0));
}
// Step 4: Re-add columns in desired order
for (TableColumn col : reordered) {
newColumnModel.addColumn(col);
}
} catch (Exception e) {
AppLogger.logSevere("Error in UIUtils.reOrderColumn", e);
}
}
Код: Выделить всё
private void setDataInTable(AbstractTableModel tableModel) {
TableColumnModel oldColModel = Utils.deepCopy(accessLogTbl.getColumnModel());
accessLogTbl.setModel(tableModel);
accessLogTbl.setRowSorter(new TableRowSorter(accessLogTbl.getModel()));
List dbColumnNames = new ArrayList();
for (int i = 0; i < accessLogTbl.getColumnCount(); i++) {
String columnName = accessLogTbl.getColumnName(i);
AccessLogInfoDTO infoDTO = AccessLogInfoService.getAccessLogInfoByDescription(columnName, false);
dbColumnNames.add(infoDTO!=null ? infoDTO.getDbColumnName().toLowerCase(): columnName.toLowerCase());
setAccessLogTableCellRenderer(i, infoDTO);
}
setDbColumnNames(dbColumnNames);
UIUtils.reOrderColumn(accessLogTbl.getColumnModel(), oldColModel);
}
Код: Выделить всё
conn = DBConnector.getConnection();
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
ResultSetMetaData metaData = rs.getMetaData();
int columnCount = metaData.getColumnCount();
String[] columnNames = new String[columnCount];
List
Подробнее здесь: [url]https://stackoverflow.com/questions/79666158/reordering-the-columns-in-jtable-glitching-the-column-dragging-functionality[/url]