Пользовательский TableCellRenderer не работает (рендеринг строки таблицы)

StackOverflow https://stackoverflow.com/questions/3898719

Вопрос

Я пытаюсь сделать конкретный ряд своего jtable (он должен иметь другой цвет фона, и он должен иметь смелые персонажи).

Я нашел несколько вопросов относительно того, как реализовать пользовательский TableCellRenderer (здесь и здесь) и учебник Как использовать таблицы и этот (Рендеринг строки таблицы).

Я использую JInternalFrame отображать JTable. Анкет Я пытался внедрить оба решения, но ни один getCellRenderer ни prepareRenderer называются. При отладе, я могу видеть, как создают мой новый JTable, но моя точка останова внутри методов не вызывается.

Мой код выглядит как:

this.add(createData(model));

private JComponent createData(ProfitLossTableModel model) {
    JTable table = new JTable(model) {

        public TableCellRenderer getCellRenderer(int row, int column) {
            if ((row == 0) && (column == 0)) {
                DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
                renderer.setHorizontalAlignment(JLabel.RIGHT);
                renderer.setBackground(Color.red);
                return renderer;
            } else {
                return super.getCellRenderer(row, column);
            }
        }
    };

    table.setPreferredScrollableViewportSize(table.getPreferredSize());
    table.changeSelection(0, 0, false, false);
    table.setAutoCreateRowSorter(true);
    return new JScrollPane(table);
}

Как видите, модель - моя реализация AbstractTableModel.

Конечно, я что -то упускаю. Я пытался позвонить repaint() Чтобы увидеть, произошло ли что -то, но ничего не произошло.

Я также пытался поставить JPANE в моем Jinternarrame, и им добавляют в него jscrollpane, но и ничего не произошло.

Любая помощь?

Тиа,

Боб

Это было полезно?

Решение

Как обсуждалось в Концепции: редакторы и визуализаторы, »таблица вызывает модель таблицы getColumnClass Способ, который получает тип данных элементов колонны. «Вы должны убедиться, что ваша реализация AbstractTableModel возвращает подходящее значение, как предложено в этом пример.

Дополнение:

Я пытаюсь отобрать ряд, а не столбец.

Роб Камик Рендеринг строки таблицы подход, который переопределяет prepareRenderer() Кажется, подойдет.

tabbedPane.addTab("FirstRow", createFirstRow(model));
...
private JComponent createFirstRow(DefaultTableModel model) {

    final Font font = new Font("Serif", Font.BOLD, 14);

    JTable table = new JTable(model) {

        public Component prepareRenderer(
                TableCellRenderer renderer, int row, int column) {
            Component c = super.prepareRenderer(renderer, row, column);
            if (!isRowSelected(row)) {
                c.setBackground(row == 0 ? Color.yellow: getBackground());
                c.setFont(row == 0 ? font : getFont());
            }
            return c;
        }
    };

    table.setPreferredScrollableViewportSize(table.getPreferredSize());
    table.changeSelection(1, 1, false, false);
    return new JScrollPane(table);
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top