如何将垂直 header 添加到 table?

How do I add a vertical header to a table?

我有这个 table,我想制作一个 header,就像从 0 到 10 的那个一样,但是是垂直的,从 A 到 J(下图)

我还想知道如果数字大于 10,我如何更改正方形的颜色。

您可以添加任何组件作为滚动窗格的行 header 视图。

在这种情况下,您可以使用带有自定义渲染器的 JList:

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

public class ListRowHeader extends JPanel
{
    public ListRowHeader()
    {
        JTable table = new JTable(10, 10);
        table.setPreferredScrollableViewportSize(table.getPreferredSize());
        JScrollPane scrollPane = new JScrollPane( table );
        add( scrollPane );

        String[] letters = {"A", "B", "C", "D","E", "F", "G", "H", "I", "J"};

        JList<String> list = new JList<>( letters );
        list.setFixedCellWidth(50);
        list.setFixedCellHeight( table.getRowHeight() );
        list.setCellRenderer( new RowHeaderRenderer() );
        scrollPane.setRowHeaderView( list );
    }

    private static class RowHeaderRenderer extends DefaultListCellRenderer
    {
        public RowHeaderRenderer()
        {
            setHorizontalAlignment(JLabel.CENTER);
        }

        public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus)
        {
            super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);

            setFont(UIManager.getFont("TableHeader.font"));
            setBorder(UIManager.getBorder("TableHeader.cellBorder"));
            setBackground(UIManager.getColor("TableHeader.background"));

            return this;
        }
    }


    private static void createAndShowGUI()
    {
        JFrame frame = new JFrame("ListRowHeader");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(new ListRowHeader(), BorderLayout.LINE_START);
        frame.pack();
        frame.setLocationByPlatform( true );
        frame.setVisible( true );
    }

    public static void main(String[] args) throws Exception
    {
        java.awt.EventQueue.invokeLater( () -> createAndShowGUI() );
    }
}