package com.example.client.utils;
|
|
import com.example.client.dto.ColumnDto;
|
import com.example.client.dto.JComboBoxItem;
|
import com.example.server.sysOss.service.SysOssService;
|
import org.apache.commons.lang3.StringUtils;
|
import org.jdesktop.swingx.JXDatePicker;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
|
import javax.swing.*;
|
import javax.swing.event.TableModelEvent;
|
import javax.swing.plaf.basic.BasicComboBoxRenderer;
|
import javax.swing.table.DefaultTableModel;
|
import javax.swing.table.TableCellEditor;
|
import javax.swing.table.TableModel;
|
import java.awt.*;
|
import java.lang.reflect.Method;
|
import java.text.ParseException;
|
import java.text.SimpleDateFormat;
|
import java.time.LocalDateTime;
|
import java.time.format.DateTimeFormatter;
|
import java.util.Date;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
@Service
|
public class CommonTable {
|
|
public static JTable createCommonTable(List<?> list, List<ColumnDto> dtoList) {
|
TableModel dataModel = createCommonTableModel(list, dtoList);
|
JTable table = new JTable() {
|
@Override
|
public boolean isCellEditable(int row, int column) {
|
return dtoList.get(column).getIsEdit();
|
}
|
};
|
table.setModel(dataModel);
|
setColumnType(dtoList, table);
|
|
return table;
|
}
|
|
public static void setColumnType(List<ColumnDto> dtoList, JTable table) {
|
for (int j = 0; j < dtoList.size(); j++) {
|
table.getColumnModel().getColumn(j).setPreferredWidth(dtoList.get(j).getColumnWidth());
|
if (dtoList.get(j).getButtonList() != null) {
|
CreateTableButton.AcceptRejectRenderer renderer = new CreateTableButton.AcceptRejectRenderer(dtoList.get(j).getButtonList());
|
table.getColumnModel().getColumn(j).setCellRenderer(renderer);
|
table.getColumnModel().getColumn(j).setCellEditor(new CreateTableButton.AcceptRejectEditor(dtoList.get(j).getButtonList()));
|
}
|
if ("selectDate".equals(dtoList.get(j).getColumnType())) {
|
JXDatePicker datePicker = new JXDatePicker();
|
datePicker.setFormats("yyyy-MM-dd");
|
datePicker.addActionListener(e -> {
|
// 停止单元格编辑,关闭弹出窗口
|
TableCellEditor editor = table.getCellEditor();
|
if (editor != null) {
|
editor.stopCellEditing();
|
}
|
});
|
table.getColumnModel().getColumn(j).setCellEditor(new DatePickerEditor(datePicker));
|
}
|
if ("dict".equals(dtoList.get(j).getColumnType()) || "dicts".equals(dtoList.get(j).getColumnType())) {
|
Map<Long, JComboBoxItem> itemMap = new HashMap<>();
|
JComboBoxItem[] dictList = dtoList.get(j).getDictList();
|
for (JComboBoxItem item : dictList) {
|
itemMap.put(item.getId(), item);
|
}
|
|
// 创建 JComboBox 并添加 Item 对象
|
JComboBox<JComboBoxItem> comboBox = new JComboBox<>(dictList);
|
|
// 设置自定义渲染器
|
comboBox.setRenderer(new BasicComboBoxRenderer() {
|
@Override
|
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
|
super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
|
if (value instanceof JComboBoxItem) {
|
JComboBoxItem item = (JComboBoxItem) value;
|
setText(item.getName()); // 显示 name
|
}
|
return this;
|
}
|
});
|
table.getColumnModel().getColumn(j).setCellRenderer(new CellComboBoxRenderer(itemMap));
|
table.getColumnModel().getColumn(j).setCellEditor(new CellComboBoxEditor(comboBox, itemMap));
|
}
|
if ("Circle".equals(dtoList.get(j).getColumnType())) {
|
table.getColumnModel().getColumn(j).setCellRenderer(new CircleRenderer());
|
}
|
}
|
}
|
|
public static void refreshTable(List<?> list, List<ColumnDto> dtoList, JTable table) {
|
TableModel dataModel = createCommonTableModel(list, dtoList);
|
table.setModel(dataModel);
|
setColumnType(dtoList, table);
|
}
|
|
public static String[][] getRowData(List<?> list, List<ColumnDto> dtoList) {
|
String[][] rowData = new String[list.size()][dtoList.size()];
|
|
for (int i = 0; i < list.size(); i++) {
|
Object object = list.get(i);
|
Class c1azz = object.getClass();
|
for (int j = 0; j < dtoList.size(); j++) {
|
Method method = null;
|
try {
|
String fieldName = dtoList.get(j).getColumnName();
|
String valueStr = "";
|
if (StringUtils.isNotBlank(fieldName)) {
|
method = c1azz.getMethod("get" + StringUtils.capitalize(fieldName));
|
Object value = method.invoke(object);
|
if (value != null) {
|
valueStr = value.toString();
|
}
|
}
|
if (StringUtils.isBlank(dtoList.get(j).getColumnType()) || dtoList.get(j).getColumnType().equals("selectDate")) {
|
rowData[i][j] = valueStr;
|
} else if (dtoList.get(j).getColumnType().equals("dict")) {
|
rowData[i][j] = valueStr;
|
} else if (dtoList.get(j).getColumnType().equals("dicts")) {
|
rowData[i][j] = valueStr;
|
} else if (dtoList.get(j).getColumnType().equals("Circle")) {
|
rowData[i][j] = valueStr;
|
} else if (dtoList.get(j).getColumnType().equals("autoCreate")) {
|
rowData[i][j] = "" + (i + 1);
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
}
|
return rowData;
|
}
|
|
public static TableModel createCommonTableModel(List<?> list, List<ColumnDto> dtoList) {
|
String[][] rowData = getRowData(list, dtoList);
|
String[] columnNames = new String[dtoList.size()];
|
for (int j = 0; j < dtoList.size(); j++) {
|
columnNames[j] = dtoList.get(j).getColumnDesc();
|
}
|
TableModel dataModel = new DefaultTableModel(rowData, columnNames);
|
return dataModel;
|
}
|
|
public static void saveTableList(List<?> list, JTable table, List<ColumnDto> dtoList) {
|
for (int i = 0; i < table.getModel().getRowCount(); i++) {
|
|
Object object = list.get(i);
|
Class c1azz = object.getClass();
|
for (int j = 0; j < dtoList.size(); j++) {
|
Method method = null;
|
try {
|
String fieldName = dtoList.get(j).getColumnName();
|
if (StringUtils.isNotBlank(fieldName)) {
|
if ("dict".equals(dtoList.get(j).getColumnType())) {
|
method = c1azz.getMethod("set" + StringUtils.capitalize(fieldName), Long.class);
|
} else if ("dicts".equals(dtoList.get(j).getColumnType())) {
|
method = c1azz.getMethod("set" + StringUtils.capitalize(fieldName), Integer.class);
|
} else {
|
method = c1azz.getMethod("set" + StringUtils.capitalize(fieldName), String.class);
|
}
|
Object value = table.getModel().getValueAt(i, j);
|
if (value != null && !value.equals("") ) {
|
if ("selectDate".equals(dtoList.get(j).getColumnType())) {
|
method.invoke(object, value.toString());
|
System.out.println(value.toString().length());
|
String valueStr = value.toString();
|
//Method method2 = c1azz.getMethod("set" + StringUtils.capitalize(fieldName) + "Digit", Long.class);
|
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
|
Date date = null;
|
try {
|
date = format.parse(valueStr);
|
} catch (ParseException e) {
|
e.printStackTrace();
|
}
|
Long timestamp = date.getTime();
|
// method2.invoke(object, timestamp);
|
} else if ("dict".equals(dtoList.get(j).getColumnType())) {
|
method.invoke(object, Long.parseLong(value.toString()));
|
} else if ("dicts".equals(dtoList.get(j).getColumnType())) {
|
method.invoke(object, Integer.valueOf(value.toString()));
|
} else {
|
method.invoke(object, value.toString());
|
}
|
}
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
}
|
}
|
}
|