Spec-Zone .ru
спецификации, руководства, описания, API
|
К настоящему времени Вы знаете что paintComponent
метод - то, куда весь Ваш код рисования должен быть помещен. Это - истина, что этот метод будет вызван, когда будет пора нарисовать, но красящий фактически начинает выше class heirarchy, с paint
метод (определенный java.awt.Component
.) Этот метод будет выполняться подсистемой рисования всякий раз, когда Вы компонент должны быть представлены. Его подпись:
public void paint(Graphics g)
javax.swing.JComponent
расширяет этот class и дальнейшие факторы paint
метод в три отдельных метода, которые вызываются в следующем порядке:
protected void paintComponent(Graphics g)
protected void paintBorder(Graphics g)
protected void paintChildren(Graphics g)
API не делает ничего, чтобы препятствовать тому, чтобы Ваш код переопределил paintBorder
и paintChildren
, но вообще говоря, нет никакой причины для Вас сделать так. Для всех практических целей paintComponent
будет единственный метод, который Вы должны будете когда-либо переопределять.
Как ранее упомянуто, большинству стандартных компонентов Swing реализовывали их стиль отдельные Делегаты UI. Это означает, что большинство (или все) рисования для стандартных компонентов Swing продолжается следующим образом.
paint()
вызывает paintComponent()
.ui
свойство является ненулем, paintComponent()
вызывает ui.update()
.opaque
свойство является истиной, ui.update()
заполняет фон компонента цветом фона и вызывает ui.paint()
.ui.paint()
представляет контент компонента.Это то, почему наш SwingPaintDemo
код вызывает super.paintComponent(g)
. Мы могли добавить дополнительный комментарий, чтобы сделать это больше четкий:
public void paintComponent(Graphics g) { // Let UI Delegate paint first, which // includes background filling since // this component is opaque. super.paintComponent(g); g.drawString("This is my custom Panel!",10,20); redSquare.paintSquare(g); }
Если Вы поняли весь демонстрационный код, обеспеченный в этом уроке, поздравлениях! У Вас есть достаточно многие практические знания, чтобы записать эффективный код рисования в Ваших собственных приложениях. Если однако Вы хотите более близкий взгляд "под капотом", пожалуйста, обратитесь к статье SDN, соединенной с от первой страницы этого урока.