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

67 lines
2.6 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;
import java.util.List;
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-05-12 19:02:38 +08:00
private final List<MessageEntry> log;
private final Map<String, Color> colorMap = new HashMap<>();
private final JTable table; // 保存对表格的引用
2023-10-18 00:44:50 +08:00
2024-05-06 12:56:56 +08:00
public MessageRenderer(List<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));
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);
2024-05-06 12:56:56 +08:00
MessageEntry messageEntry = log.get(table.convertRowIndexToModel(row)); // 使用convertRowIndexToModel方法转换行索引
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 (isSelected) {
2023-10-19 22:41:14 +08:00
// 通过更改RGB颜色来达成阴影效果
2024-05-12 19:02:38 +08:00
component.setBackground(new Color(color.getRed() - 0x20, color.getGreen() - 0x20, color.getBlue() - 0x20));
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));
}
}
}
}