Нарисуйте одну ячейку (или одну строку) в JTable без средства визуализации

У меня есть JTable, и я хочу, чтобы ячейка (или ее строка) окрашивалась в красный цвет, когда введенное значение выше определенного значения. Я проверяю это в TableModelListener для обнаружения TableChange, поэтому я не вижу способа раскрасить таблицу в средстве визуализации (хотя я уверен, что это возможно, только мне это неизвестно).

Я также видел этот вопрос, но я не не знаю, как его использовать.


person Roman Rdgz    schedule 15.07.2011    source источник
comment
не имеет отношения к вопросу, на который вы ссылались - JTable - это Swing, TableWhatever в другом ...?   -  person kleopatra    schedule 15.07.2011
comment
еще не читали учебник по свингу Snoracles? 1) вам всегда нужен рендерер 2) вы не окрашиваете рендерер, вы окрашиваете компонент рендеринга: это делается настраиваемым рендерером, который настраивает визуальные свойства компонента в зависимости от контекста, т.е. по стоимости   -  person kleopatra    schedule 15.07.2011


Ответы (2)


это задание для prepareRendered, как вы можете видеть здесь

person mKorbel    schedule 15.07.2011

Ниже для одной ячейки таблицы вы можете расширить ее для строки:

Сначала возьмите столбец таблицы, который вы хотите нарисовать, а затем добавьте к нему TableCellRenderer следующим образом:

    TableColumnModel columnModel = myTable.getColumnModel();
    TableColumn column = columnModel.getColumn(5); // Give column index here
    column.setCellRenderer(new MyTableCellRenderer());

Создайте класс MyTableCellRendere, который реализует TableCellRenderer и расширяет JLabel (чтобы мы могли задать ему цвет фона). Это будет выглядеть примерно так:

public class MyTableCellRenderer extends JLabel implements TableCellRenderer {
    public Component getTableCellRendererComponent(JTable table,
            Object value, boolean isSelected, boolean hasFocus, int row,
            int col) {
        JLabel jLabel = (JLabel) value;
        setBackground(jLabel.getBackground());
        setForeground(UIConstants.black);
        setText(jLabel.getText());
        return this;
    }
}

Теперь в методе, в котором вы прослушиваете изменение значения ячейки таблицы, сделайте следующее:

JLabel label = new JLabel(changedValue);
// check for some condition
label.setBackground(Color.red); // set color based on some condition
myTable.setValueAt(label, 0, 5); // here 0 is rowNumber and 5 is colIndex that should be same used to get tableColumn before.
person Harry Joy    schedule 15.07.2011
comment
можно, но не в этом дело. Прочтите руководство, чтобы узнать, как правильно выполнить визуальную настройку ;-) - person kleopatra; 16.07.2011