#java #swing #jtable #renderer
Вопрос:
Я новичок в использовании TableCellRenderers. Я использовал документацию по Orcale и несколько видеороликов, чтобы получить тот, который работает. Для вызова средства визуализации я использую код:
table.getColumnModel().getColumn(x).setCellRenderer(new Renderer());
Для моей таблицы я хочу использовать это для каждой строки. Я повозился с заменой столбцов строками, но моя среда разработки показывает, что это не методы с таким именем, что меня очень удивляет.
Есть ли какой-то код, который может получить значение(x)?
код средства визуализации, если это необходимо (аргумент был взят из кода выше для упрощения)
int t;
public Renderer(int x){
this.t=x;
}
@Override
public Component getTableCellRendererComponent (JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column){
JLabel x = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
DefaultTableModel tableModel = (DefaultTableModel) table.getModel();
if(t==1){
x.setBackground(Color.GREEN);
}else{
x.setBackground(Color.WHITE);
}
return x;
}
}
Комментарии:
1. Почему бы не положиться на
row
значение вgetTableCellRendererComponent
методе?2. См.: Визуализация строк таблицы для примеров.
Ответ №1:
Вы можете переопределить метод prepareRenderer для JTable
@Override
public Component prepareRenderer(TableCellRenderer renderer, int row,
int column) {
int row = convertRowIndexToModel(row);
int column = convertColumnIndexToModel(column);
if (!isRowSelected(row)) {
if (column != 0 || row != 0) {
comp.setBackground(Color.RED);
}
}
return comp;
}
};
Комментарии:
1. (1 ) для выполнения визуализации только в том случае, если строка не выбрана.
Ответ №2:
Мне не нравится возиться с JTable
самим собой, так что, может быть
table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
boolean hasFocus, int row, int column) {
Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
c.setBackground(t == 1 ? Color.green : Color.white);
return c;
};
});