Files
HaE/src/main/java/hae/component/board/message/MessageRenderer.java

80 lines
3.0 KiB
Java
Raw Normal View History

2024-05-06 12:56:56 +08:00
package hae.component.board.message;
2023-10-18 00:44:50 +08:00
2024-05-12 19:02:38 +08:00
import javax.swing.*;
import javax.swing.table.DefaultTableCellRenderer;
import java.awt.*;
2023-10-18 00:44:50 +08:00
import java.util.HashMap;
2024-06-19 22:16:57 +08:00
import java.util.LinkedList;
2023-10-18 00:44:50 +08:00
import java.util.Map;
2024-05-06 12:56:56 +08:00
public class MessageRenderer extends DefaultTableCellRenderer {
2023-10-18 00:44:50 +08:00
2024-06-19 22:16:57 +08:00
private final LinkedList<MessageEntry> log;
2024-05-12 19:02:38 +08:00
private final Map<String, Color> colorMap = new HashMap<>();
private final JTable table; // 保存对表格的引用
2023-10-18 00:44:50 +08:00
2024-06-19 22:16:57 +08:00
public MessageRenderer(LinkedList<MessageEntry> log, JTable table) {
2023-10-18 00:44:50 +08:00
this.log = log;
2023-10-19 22:41:14 +08:00
// 与BurpSuite的颜色保持一致
this.colorMap.put("red", new Color(0xFF, 0x64, 0x64));
this.colorMap.put("orange", new Color(0xFF, 0xC8, 0x64));
this.colorMap.put("yellow", new Color(0xFF, 0xFF, 0x64));
this.colorMap.put("green", new Color(0x64, 0xFF, 0x64));
this.colorMap.put("cyan", new Color(0x64, 0xFF, 0xFF));
this.colorMap.put("blue", new Color(0x64, 0x64, 0xFF));
this.colorMap.put("pink", new Color(0xFF, 0xC8, 0xC8));
this.colorMap.put("magenta", new Color(0xFF, 0x64, 0xFF));
this.colorMap.put("gray", new Color(0xB4, 0xB4, 0xB4));
this.colorMap.put("none", new Color(0, 0, 0, 0));
2023-10-18 00:44:50 +08:00
this.table = table;
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
2024-05-06 12:56:56 +08:00
boolean hasFocus, int row, int column) {
2023-10-18 00:44:50 +08:00
Component component = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
// 添加边界检查以防止IndexOutOfBoundsException
int modelRow = table.convertRowIndexToModel(row);
if (modelRow < 0 || modelRow >= log.size()) {
// 如果索引无效,返回默认渲染组件(使用默认背景色)
component.setBackground(Color.WHITE);
component.setForeground(Color.BLACK);
return component;
}
MessageEntry messageEntry = log.get(modelRow);
2023-10-18 00:44:50 +08:00
// 设置颜色
2024-05-06 12:56:56 +08:00
String colorByLog = messageEntry.getColor();
2023-10-18 00:44:50 +08:00
Color color = colorMap.get(colorByLog);
// 如果颜色映射中没有找到对应颜色,使用默认白色
if (color == null) {
color = Color.WHITE;
}
2023-10-18 00:44:50 +08:00
if (isSelected) {
component.setBackground(UIManager.getColor("Table.selectionBackground"));
2023-10-18 00:44:50 +08:00
} else {
component.setBackground(color);
}
2023-10-19 22:41:14 +08:00
component.setForeground(Color.BLACK);
2023-10-18 00:44:50 +08:00
return component;
}
@Override
public void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
super.firePropertyChange(propertyName, oldValue, newValue);
// 监听表格排序的属性变化
if ("tableCellRenderer".equals(propertyName)) {
// 更新每一行数据的颜色
for (int i = 0; i < table.getRowCount(); i++) {
table.repaint(table.getCellRect(i, 0, true));
}
}
}
}