Проблема NetBeans с CustomTableCellRenderer - PullRequest
2 голосов
/ 20 июля 2011

Я пытаюсь добавить другие типы данных (чтобы правильно сортировать целочисленные столбцы JTable) в мой JTable и одновременно сделать так, чтобы нечетные строки были более темными, чем четные строки.

У меня есть следующий код моего TableCellRenderer:

public class MyCustomTableCellRenderer extends DefaultTableCellRenderer 
{
    @Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean lected, boolean hasFocus, int row, int column) 
    {
        Component cell = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);

        if (isSelected)
            cell.setBackground( new Color(180,180 ,255) );
        else
            if( row%2 == 0)
                cell.setBackground( new Color(220,220 ,255) );
            else
                cell.setBackground( Color.white );

        return cell;
    }
}

И код DataModel выглядит следующим образом:

DefaultTableModel MydataModel = new DefaultTableModel()
{
    @Override
    public boolean isCellEditable(int row, int col)
    {
        return false;
    }

    @Override
    public Class getColumnClass(int c)  
    {
        String colname = getColumnName(c);

        if (colname.contains("INT")) return Integer.class;
        return String.class;
    }
};

Я добавляю новые целочисленные значения, используя новое целое число (some_integer) кtable.

При запуске кода таблица отображается надлежащим образом (нечетные и четные строки имеют разные цвета), за исключением столбцов с целочисленными значениями.Они просто белые, как будто они не были затронуты Рендерером.

Пожалуйста, объясните мне, как эту проблему можно решить.Заранее спасибо.Макс.

Ответы [ 2 ]

2 голосов
/ 20 июля 2011

Используя prepareRenderer, вы можете устранить проблему синхронизации табличного представления с моделью таблицы с помощью int modelRow = convertRowIndexToModel(row);, что также решит ваши проблемы со сломанным разорванным фоном.Есть пример, который вы можете увидеть здесь , или лучший пример - @ camickr Рендеринг таблицы строк .

2 голосов
/ 20 июля 2011

Зависит от того, как вы установили рендер.Используйте метод

public void setDefaultRenderer(Class<?> columnClass, TableCellRenderer renderer)

, передав класс Integer и ваш рендерер.

...