Пользовательский TableCellRenderer не работает (рендеринг строки таблицы)
-
29-09-2019 - |
Вопрос
Я пытаюсь сделать конкретный ряд своего 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);
}