
Wicket allows us to design our web pages in terms of components and containers, just like AWT does with desktop windows. 
Both frameworks share the same component-based architecture: in AWT we have a _Windows_ instance which represents the physical windows containing GUI components (like text fields, radio buttons, drawing areas, etc...), in Wicket we have a _WebPage_ instance which represents the physical web page containing HTML components (pictures, buttons, forms, etc... ) .

image::../img/uml-component.png[]

....
@startuml
package java.awt {
	class Component
	class Window extends Component
	
	Window "*" *-- "1" Component
}

package org.apache.wicket {
	class org.apache.wicket.Component
	class WebPage extends org.apache.wicket.Component
	
	WebPage "*" *-- "1" org.apache.wicket.Component
}
@enduml
....

In both frameworks we find a base class for GUI components called _Component_. Wicket pages can be composed (and usually are) by many components, just like AWT windows are composed by Swing/AWT components. Both frameworks promote the reuse of presentation code and GUI elements building custom components. Even if Wicket already comes with a rich set of ready-to-use components, building custom components is a common practice when working with this framework. We'll learn more about custom components in the next chapters.

