Игры, математика, программирование, и просто размышлизмы

среда, 2 октября 2013 г.

Баг с хайлайтером JXTable и способы его починки

Есть в свинге (swing) такая штука - JXTable, хорошая но бажная, поскольку находится в проекте лабс. И есть у этой штуки(равно, как и у других таблиц унаследованных от JTable) возможность выделить разным способом ячейки таблицы: цветом беграунда, размером и цветом шрифта и так далее. Существует множество дефолтных хайлайтеров, у дефолтного определяется нужно ли выделять ячейку с помощью предиката, который передаётся в конструктор.
      Всё вроде бы хорошо, но у дефолтного ColorHighlighter-а(он задаёт цвет беграунда и фореграунда) есть бага - если его задать, линии таблицы в выделенных ячейках пропадают. Фигово, товарищи.

Решается это дело добавлением другого хайлайтера PainterHighlighter. В него передаётся паинтер, который собственно и рисует линии таблицы.
Примерно так

public class InsteadGridPainter implements Painter {
    @Override
    public void paint(Graphics2D g, Object object, int width, int height) {

        g.setColor(Color.gray);
        g.drawLine(width - 1, 0, width - 1, height + 1);
        g.drawLine(0, height - 1, width, height - 1);

    }
}

Вот, этим нехитрым способом и можно побороть этот грёбаный баг