Пользовательский TableCellRenderer не работает (рендеринг строк таблицы)
Я пытаюсь визуализировать конкретную строку моего 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 в мой JInternalFrame, и они добавили в него JScrollPane, но ничего не произошло.
Любая помощь?
ТИА,
боб
1 ответ
Как обсуждалось в Концепции: Редакторы и Рендереры, "таблица вызывает модель таблицы 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);
}