| | |
| | | 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); |
| | | } |
| | | } |