package com.example.client.utils; import com.example.client.dto.JComboBoxItem; import org.apache.commons.lang3.math.NumberUtils; import javax.swing.*; import javax.swing.table.TableCellEditor; import javax.swing.table.TableCellRenderer; import java.awt.*; import java.util.Map; public class CellComboBoxRenderer implements TableCellRenderer { private final Map itemMap; public CellComboBoxRenderer(Map itemMap) { this.itemMap = itemMap; } @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { JLabel label = new JLabel(); String valueStr = value.toString(); if (NumberUtils.isDigits(valueStr)) { // 单个数字的情况 long id = Long.parseLong(valueStr); JComboBoxItem item = itemMap.get(id); label.setText(item != null ? item.getName() : "Unknown"); } else if(this.isCommaSeparatedDigits(valueStr)){ StringBuilder text = new StringBuilder(); String[] stringArray = valueStr.split(","); for (String str : stringArray) { try { long id = Long.parseLong(str.trim()); JComboBoxItem item = itemMap.get(id); if (item != null) { if (text.length() > 0) { text.append(", "); } text.append(item.getName()); } } catch (NumberFormatException e) { // 如果某个值不是有效的数字,跳过它 continue; } } label.setText(text.toString()); } if (isSelected) { label.setBackground(table.getSelectionBackground()); label.setForeground(table.getSelectionForeground()); } else { label.setBackground(table.getBackground()); label.setForeground(table.getForeground()); } return label; } private boolean isCommaSeparatedDigits(String input) { if (input == null || !input.contains(",")) { return false; // 不包含逗号,不是逗号分隔的字符串 } String[] parts = input.split(","); for (String part : parts) { if (!NumberUtils.isDigits(part.trim())) { return false; // 如果某个部分不是纯数字,则返回 false } } return true; // 所有部分都是纯数字 } }