Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Đổi màu dòng xen kẽ (alternate row color) cho JTable trong Java Swing

Override prepareRenderer()

Phương thức prepareRenderer(TableCellRenderer, int row, int column) của JTable được gọi trước khi render mỗi cell. Override để set background tùy theo row index.

Ví dụ


import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;

public class AlternateRowColorTableDemo extends JFrame {
    public AlternateRowColorTableDemo() {
        setTitle("Alternate Row Color JTable");

        JTable table = new JTable(
            new Object[][] {
                {"115", "Ramesh"},
                {"120", "Adithya"},
                {"125", "Jai"},
                {"130", "Chaitanya"},
                {"135", "Raja"}
            },
            new String[] {"Employee Id", "Employee Name"}
        ) {
            @Override
            public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
                Component comp = super.prepareRenderer(renderer, row, column);

                // Không đổi màu nếu cell đang được chọn
                if (!comp.getBackground().equals(getSelectionBackground())) {
                    Color alternateColor = new Color(200, 201, 210); // xám nhạt
                    Color whiteColor = Color.WHITE;
                    comp.setBackground(row % 2 == 0 ? alternateColor : whiteColor);
                }
                return comp;
            }
        };

        add(new JScrollPane(table));
        setSize(400, 300);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(AlternateRowColorTableDemo::new);
    }
}

Kết quả

Đổi màu dòng xen kẽ (alternate row color) cho JTable trong Java Swing

Mẹo: Từ Java 6, có thể dùng table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() { ... }) nhưng override prepareRenderer trên JTable subclass đơn giản hơn.