Pergunta

Qual a diferença entre Window e Frame?

Resposta

Ambas as classes definem componentes do tipo janela mas com caracteristicas ligeiramente diferentes. Hierarquicamente temos que as classes java.awt.Window e java.awt.Frame se relacionam da seguinte forma:

java.lang.Object
   |
   +----java.awt.Component
           |
           +----java.awt.Container
                   |
                   +----java.awt.Window
                           |
                           +----java.awt.Frame

Ou seja, ambas são subclasses (são derivadas) da classe Container, comportando-se como compartimento para outros componentes embora não possam conter janelas (JavaFaq 0118). O layout default empregado por estas janelas é o BordeLayout.

A classe java.awt.Window define uma janela simples, sem barra de título, controle ou bordas que pode ser utilizada para a construção de animações, telas de apresentação (splash screens) ou menus do tipo popup ou dropdown especialmente customizados. Em virtude disso objetos da classe Window produzem apenas os eventos WindowOpened e WindowClosed além dos eventos relativos a classe Container.

Já a classe java.awt.Frame define um janela típica, contendo barra de título, controles do sistema e bordas além da capacidade de exibir uma barra de menus em sua parte superior. Tais janelas são utilizadas para construção de aplicações gráficas onde se exibem vários componentes com funcionalidade específicamente determinada para cada aplicação. Objetos da classe Frame são capazes de produzir os seguintes eventos em adição aos eventos relativos a classe Container: WindowOpened, WindowClosing, WindowClosed, WindowIconified, WindowDeiconified, WindowActivated, WindowDeactivated.