1

のグリッドのような ( ) がありますgrid。ユーザーが行と列のサイズを変更できるようにしたい。列については、単にこれを使用しました:JTableMS Excel

grid.getTableHeader().setResizingAllowed(true);

行については、ここTableRowResizerからクラスを取得し、次のように使用しています。

new TableRowResizer(grid);

これはうまくいきます。ただし、問題が 1 つあります。行のサイズを変更しても、行ヘッダーのサイズも変更されません。

ここに画像の説明を入力

行ヘッダーの作成方法は次のとおりです。

    AbstractListModel lm = null;
    lm = new TableListModel(grid);
    final JList list = new JList(lm);
    list.setFixedCellWidth(60);         
    list.setFixedCellHeight(grid.getRowHeight());
    list.setCellRenderer(new TableRowHeaderRenderer(grid));
    list.setBackground(grid.getTableHeader().getBackground());
    scrollPane.setRowHeaderView(list);

TableRowHeaderRendererクラスは次のとおりです。

    class TableRowHeaderRenderer extends JLabel implements ListCellRenderer {   

        private JTable table;

        public TableRowHeaderRenderer(JTable table)
        {
            this.table = table;
            JTableHeader header = table.getTableHeader();
            setOpaque(true);
            setBorder(BorderFactory.createEtchedBorder());
            setHorizontalAlignment(CENTER);
            setForeground(header.getForeground());
            setBackground(header.getBackground());
            setFont(header.getFont());
        }

        public Component getListCellRendererComponent(JList list, 
        Object value, int index, boolean isSelected, boolean cellHasFocus) 
        {
            Color bg = UIManager.getColor("TableHeader.background");
            int selectedrow =  table.getSelectedRow();
            if (selectedrow==index) bg = new Color(107, 142, 35);
            setBackground(bg);
            setText("" + Grid.getRowName(index));
            return this;
        }
        }

そして、これはTableListModelクラスです:

    class TableListModel extends AbstractListModel{
        private JTable mytable;

        public TableListModel(JTable table) {
            super();
            mytable = table;
            }

        public int getSize() {
            return mytable.getRowCount();
            }

        public Object getElementAt(int index) {
            return "" + index;
            }
        }
4

1 に答える 1