Нарисуйте одну ячейку (или одну строку) в JTable без средства визуализации - PullRequest
1 голос
/ 15 июля 2011

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

Ответы [ 2 ]

1 голос
/ 15 июля 2011

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

0 голосов
/ 15 июля 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.
...