826220679@qq.com
18 小时以前 1bda9524add969e315d870f284046ecf1097f956
src/publicsWay/TableUtils.java
@@ -1,47 +1,110 @@
package publicsWay; // 包声明
import javax.swing.*; // 导入Swing组件
import javax.swing.table.DefaultTableCellRenderer; // 导入表格单元格渲染器
import javax.swing.table.DefaultTableModel; // 导入默认表格模型
import java.awt.*; // 导入AWT图形组件
package publicsWay;
public class TableUtils { // 表格工具类
import javax.swing.*;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;
import java.awt.*;
public class TableUtils {
    
    // 创建通用表格的方法
    // Create a styled table with specified column names
    @SuppressWarnings("serial")
   public static JTable createCommonTable(String[] columnNames) { // 静态方法可直接调用
        // 创建表格模型 - 匿名内部类扩展DefaultTableModel
        DefaultTableModel model = new DefaultTableModel(columnNames, 0) { // 初始化表格模型
    public static JTable createCommonTable(String[] columnNames) {
        // Create table model
        DefaultTableModel model = new DefaultTableModel(columnNames, 0) {
            @Override
            public boolean isCellEditable(int row, int column) { // 重写单元格可编辑性
                return false; // 所有单元格不可编辑
            public boolean isCellEditable(int row, int column) {
                return false;
            }
        };
        
        // 创建表格实例
        JTable table = new JTable(model); // 使用自定义模型创建表格
        table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); // 设置单选模式
        // Create table instance
        JTable table = new JTable(model);
        table.setAutoCreateRowSorter(true);
        table.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
        
        // 创建表头渲染器
        DefaultTableCellRenderer headerRenderer = createHeaderRenderer(); // 调用渲染器创建方法
        // Apply table styling
        setupTableStyle(table);
        
        // 应用表头渲染器到所有列
        for (int i = 0; i < table.getColumnCount(); i++) { // 遍历所有列
            table.getColumnModel().getColumn(i).setHeaderRenderer(headerRenderer); // 设置列头渲染器
        }
        // Apply header styling
        setupTableHeaderStyle(table);
        
        return table; // 返回配置好的表格实例
        return table;
    }
    
    // 创建表头渲染器
    // Setup basic table styling
    public static void setupTableStyle(JTable table) {
        table.setShowVerticalLines(false);
        table.setShowHorizontalLines(true);
        table.setGridColor(new Color(220, 220, 220));
        table.setIntercellSpacing(new Dimension(0, 1));
        table.setRowHeight(25);
    }
    // Setup table header styling
    public static void setupTableHeaderStyle(JTable table) {
        JTableHeader header = table.getTableHeader();
        header.setBackground(new Color(70, 130, 180));
        header.setForeground(Color.WHITE);
        header.setFont(header.getFont().deriveFont(Font.BOLD));
        header.setPreferredSize(new Dimension(header.getWidth(), 30));
        // Create and apply header renderer
        DefaultTableCellRenderer headerRenderer = createHeaderRenderer();
        for (int i = 0; i < table.getColumnCount(); i++) {
            table.getColumnModel().getColumn(i).setHeaderRenderer(headerRenderer);
        }
    }
    // Create header renderer
    @SuppressWarnings("serial")
   private static DefaultTableCellRenderer createHeaderRenderer() { // 私有工具方法
        return new DefaultTableCellRenderer() { // 返回匿名内部类实例
            { // 实例初始化块
                setHorizontalAlignment(SwingConstants.LEFT); // 设置表头文本左对齐
                setBackground(Color.GRAY); // 设置表头背景为灰色
                setForeground(Color.WHITE); // 设置表头文字为白色
                setFont(getFont().deriveFont(Font.BOLD)); // 设置表头字体加粗
    private static DefaultTableCellRenderer createHeaderRenderer() {
        return new DefaultTableCellRenderer() {
            {
                setHorizontalAlignment(SwingConstants.CENTER);
                setBackground(new Color(70, 130, 180));
                setForeground(Color.WHITE);
                setFont(getFont().deriveFont(Font.BOLD));
                setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
            }
        };
    }
    // Create cell renderer with zebra striping
    @SuppressWarnings("serial")
    public static DefaultTableCellRenderer createCellRenderer(int alignment) {
        return new DefaultTableCellRenderer() {
            @Override
            public Component getTableCellRendererComponent(JTable table, Object value,
                    boolean isSelected, boolean hasFocus,
                    int row, int column) {
                Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
                // Set alternating row colors
                if (!isSelected) {
                    if (row % 2 == 0) {
                        c.setBackground(new Color(240, 240, 200));
                    } else {
                        c.setBackground(Color.WHITE);
                    }
                } else {
                    c.setBackground(new Color(200, 220, 240));
                }
                // Set cell alignment
                setHorizontalAlignment(alignment);
                // Set cell padding
                setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 5));
                return c;
            }
        };
    }
    // Create centered cell renderer with zebra striping (most common case)
    public static DefaultTableCellRenderer createCenteredCellRenderer() {
        return createCellRenderer(SwingConstants.CENTER);
    }
}