Вот сижу и думаю: зачем в SWING тупой метод paint? Если тебе где-то что-то нужно нарисовать, ты не можешь просто взять, и вызвать функцию, ты обязан отнаследоваться, создав свой компонент, переопределить там метод paint, и еще придумать массу извратов, чтобы там что-то рисовалось. Притом если тебе нужно из программы нарисовать что-то непредсказуемое на данном компоненте, то ты не можешь этого сделать, т.к. надо переписывать метод paint (в рантайме никак). Я уж не говорю про тормоза, возникающие от того, что при каждой перерисовке картинка заново рендерится: рисуется фон, фигуры, картинки...
Неужели нельзя было просто засунуть во все компоненты SWING, на которых можно рисовать, матрицу пикселей? Чтобы на ней просто рисовать, а изменения сохраняются и автоматически отрисовываются когда нужно?
Мало того, в SWING нельзя взять цвет одного пикселя или нарисовать один пиксель (это относится и к компонентам, и даже к картинкам)!! Для того, чтобы сделать эти элементарные операции нужно много много извращений, порождения новых объектов и т.д..
Вспоминаю старый добрый C++Builder, и грустно становится.