This example is a more involved use of Swing user interface components. It shows how nested frames can be constructed and how to change the look-and-feel with which the components are rendered. This illustrates the split that Swing makes between the "Model" part of a component and the "Delegate" part. The model is responsible for holding the abstract state of a component -- e.g. whether a button is pressed or not pressed -- while the delegate is responsible for rendering the component to the screen and dealing with input/output etc. Changing between (e.g.) the default 'metal' look and feel and the Windows-style one involves updating the delegates but not the models. Factory classes are used to make sure that a consistent set of delegates is created. Defining a new look and feel is basically a case of defining a new factory class of the correct type and defining the different UI delegates which it should create. Other systems have split this up even further by separating the delegate into a "View" (responsible for rendering the model to the screen) and a "Controller" (responsible for receiving input and passing updates to the model). Smalltalk-80 is the classical example. In this case "GUIExample" defines the main method.