2013-06-17 6 views

ответ

4

Существует множество причин, но многие из них также будут зависеть от используемого инструментария.

Вообще говоря, использование paint на контейнере верхнего уровня блокирует вас в данном контейнере (то есть Frame или Applet). Это также позволяет вам повторно использовать компонент, поскольку окна нельзя добавить в другое окно.

Другая проблема заключается в том, что в большинстве фреймов добавлены границы (граница кадров, которая обычно содержит элементы управления заголовком и рамкой). Покраска контейнера верхнего уровня не учитывает эти вставки, что означает, что если вы рисуете в месте 0x0, вы будете рисовать под заголовком рамки.

Под качелями контейнеры верхнего уровня не имеют двойной буферизации. Это означает, что repaints имеют тенденцию мерцать, поскольку каждый элемент отображается непосредственно на графический слой индивидуально, а затем окрашивается за один проход.

Также в Swing контейнеры верхнего уровня управляются с помощью JRootPane, который размещает панель содержимого (и если вы используете ее, панель меню) на верхней части контейнера. Это означает, что ваши усилия по рисованию можно переопределить этими компонентами.

Я бы также добавил (под качелями), что слой/цепь краски компонента более гибкий, что дает вам возможность рисовать на разных слоях, хотя, вообще говоря, вы должны использовать paintComponent.