You are on page 1of 5

Como fazer quadros (janelas principais)

Um quadro é uma janela de nível superior com um título e uma borda. O tamanho do quadro inclui qualquer área designada
para a borda. As dimensões da área da fronteira podem ser obtidas usando o getInsetsmétodo. Uma vez que a área de
fronteira está incluído no tamanho total da estrutura, a fronteira obscurece de forma eficaz uma porção do quadro, restringindo
a área disponível para o processamento e / ou exibindo subcomponentes do rectângulo, que tem uma localização de canto
superior esquerdo (insets.left, insets.top)e tem um tamanho de width - (insets.left +
insets.right)por height - (insets.top + insets.bottom).

Um quadro, implementado como uma instância da JFrameclasse, é uma janela que tem decorações, como uma borda, um
título, e suporta componentes de botão que fecham ou simbolizam a janela. Aplicativos com uma GUI geralmente incluem pelo
menos um quadro. Os applets às vezes usam quadros também.

Para fazer uma janela que depende de outra janela - desaparecendo quando a outra janela é iconificada, por exemplo - use um
em dialogvez de frame.. Para criar uma janela que apareça em outra janela, use um quadro interno .

Criando e mostrando quadros

Aqui está uma imagem da janela extremamente simples criada pelo FrameDemoaplicativo de demonstração. Você pode
encontrar o código fonte em FrameDemo.java. Você pode executar o FrameDemo (baixar o JDK 7 ou posterior ).

O FrameDemocódigo a seguir mostra como criar e configurar um quadro.

// 1. Crie o quadro.
JFrame frame = new JFrame ("FrameDemo");

// 2. Opcional: o que acontece quando o quadro é fechado?


frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);

// 3. Crie componentes e coloque-os no quadro.


//...create emptyLabel ...
frame.getContentPane (). add (emptyLabel, BorderLayout.CENTER);

// 4. Dimensione o quadro.
frame.pack ();

// 5. Mostre.
frame.setVisible (true);

Aqui estão alguns detalhes sobre o código:

1. A primeira linha de código cria um quadro usando um construtor que permite definir o título do quadro. O
outro JFrameconstrutor usado com frequência é o construtor sem argumentos.
2. Em seguida, o código especifica o que acontece quando o usuário fecha o quadro. A EXIT_ON_CLOSEoperação
sai do programa quando o usuário fecha o quadro. Esse comportamento é apropriado para este programa porque o
programa tem apenas um quadro e fechar o quadro torna o programa inútil.

Consulte Respondendo a Eventos de Fechamento de Janelas para obter mais informações.

3. O próximo bit de código adiciona um rótulo em branco ao painel de conteúdo do quadro. Se você ainda não
conhece os painéis de conteúdo e como adicionar componentes a eles, leia Como adicionar componentes ao
painel de conteúdo .
Para quadros que possuem menus, você normalmente adiciona a barra de menu ao quadro aqui usando
o setJMenuBarmétodo. Veja Como usar os menus para detalhes.

4. O packmétodo dimensiona o quadro de modo que todo o seu conteúdo esteja em ou acima de seus tamanhos
preferidos. Uma alternativa packé estabelecer um tamanho de quadro explicitamente
chamando setSizeou setBounds(que também define o local do quadro). Em geral, o uso packé preferível à
chamada setSize, pois packdeixa o gerente de layout de quadros responsável pelo tamanho do quadro, e os
gerenciadores de layout são bons em ajustar as dependências da plataforma e outros fatores que afetam o
tamanho do componente.

Este exemplo não define o local do quadro, mas é fácil fazê-lo usando
o método setLocationRelativeToou setLocation. Por exemplo, o código a seguir centraliza um quadro
na tela:

frame.setLocationRelativeTo (null);

5. Chamar setVisible(true)faz o quadro aparecer na tela. Às vezes, você pode ver o showmétodo usado. Os
dois usos são equivalentes, mas usamos setVisible(true)para consistência.

Especificando Decorações de Janelas


Por padrão, as decorações das janelas são fornecidas pelo sistema de janelas nativas. No entanto, você pode solicitar que a
aparência e a aparência forneçam as decorações de um quadro. Você também pode especificar que o quadro não tenha
nenhuma decoração de janela, um recurso que possa ser usado sozinho ou para fornecer suas próprias decorações ou com o
modo exclusivo de tela inteira .

Além de especificar quem fornece as decorações das janelas, você também pode especificar qual ícone é usado para
representar a janela. Exatamente como esse ícone é usado depende do sistema de janelas ou da aparência que fornece as
decorações da janela. Se o sistema de janelas suportar minimização, o ícone será usado para representar a janela
minimizada. A maioria dos sistemas de janelas ou aparência também mostra o ícone nas decorações da janela. Um tamanho
de ícone típico é 16x16 pixels, mas alguns sistemas de janela usam outros tamanhos.

Os instantâneos a seguir mostram três quadros idênticos, exceto por suas decorações de janela. Como você pode ver pela
aparência do botão em cada quadro, todos os três usam a aparência e comportamento do Java. O primeiro usa decorações
fornecidas pelo sistema de janelas, que por acaso são o Microsoft Windows, mas poderiam facilmente ser qualquer outro
sistema executando a plataforma Java. O segundo e o terceiro usam decorações de janelas fornecidas pela aparência e
comportamento do Java. O terceiro quadro usa as decorações da janela de aparência e comportamento do Java, mas possui
um ícone personalizado.

Decorações de janelas fornecidas Decorações de janelas fornecidas Ícone personalizado; decorações da


pela aparência e sensação pelo sistema de janelas janela fornecidas pelo olhar e sentir

Aqui está um exemplo de criação de um quadro com um ícone personalizado e com decorações de janelas fornecidas pela
aparência:

// Solicite decorações de janelas fornecidas pela aparência.


JFrame.setDefaultLookAndFeelDecorated (true);

// Cria o quadro.
JFrame frame = new JFrame ("Uma janela");

// Defina o ícone do quadro para uma imagem carregada de um arquivo.


frame.setIconImage (new ImageIcon (imgURL) .getImage ());

Como o trecho de código precedente implica, você deve invocar o setDefaultLookAndFeelDecoratedmétodo antes
de criar o quadro cujas decorações você deseja afetar. O valor definido com setDefaultLookAndFeelDecoratedé usado
para todos os JFrames criados posteriormente . Você pode voltar a usar as decorações do sistema de janelas
invocando JFrame.setDefaultLookAndFeelDecorated(false). Alguns olhares e sentimentos podem não suportar
decorações de janelas; Neste caso, as decorações do sistema de janela são usadas.
O código-fonte completo do aplicativo que cria os quadros mostrados acima está em FrameDemo2.java. Além de mostrar
como escolher decorações de janelas, o FrameDemo2 também mostra como desabilitar todas as decorações de janelas e dá
um exemplo de janelas de posicionamento. Inclui dois métodos que criam os Imageobjetos usados como ícones - um é
carregado de um arquivo e o outro é pintado do zero.

Tente isto ::

1. Clique no botão Iniciar para executar a demonstração de estruturas usando o Java ™ Web Start (faça
o download do JDK 7 ou posterior ). Como alternativa, para compilar e executar o exemplo você mesmo,

consulte o índice de exemplo .


2. Abra duas janelas, ambas com decorações com aparência e sensação, mas com ícones diferentes.
A aparência e comportamento do Java exibe os ícones nas decorações de suas janelas. Dependendo do seu
sistema de janelas, o ícone pode ser usado em outro lugar para representar a janela, especialmente quando a
janela é minimizada.
3. Levante uma ou mais janelas com decorações do sistema de janelas.
Veja se o seu sistema de janelas trata esses ícones de maneira diferente.
4. Abra uma ou mais janelas sem enfeites de janelas.
Brinque com os vários tipos de janelas para ver como as decorações de janelas, o sistema de janelas e os
ícones de quadros interagem.

Respondendo a Eventos de Fechamento de Janelas

Por padrão, quando o usuário fecha um quadro na tela, o quadro fica oculto. Embora invisível, o quadro ainda existe e o
programa pode torná-lo visível novamente. Se você quer um comportamento diferente, então você precisa registrar um listener
de janela que lida com eventos de fechamento de janela, ou você precisa especificar o comportamento de fechamento padrão
usando o setDefaultCloseOperationmétodo. Você pode até fazer as duas coisas.

O argumento que setDefaultCloseOperationdeve ser um dos seguintes valores, os primeiros três dos quais são
definidos na WindowConstantsinterface de (implementado por JFrame, JInternalPane, e JDialog):

DO_NOTHING_ON_CLOSE
Não faça nada quando o usuário solicitar que a janela seja fechada. Em vez disso, o programa provavelmente deve
usar um listener de janela que execute alguma outra ação em seu windowClosingmétodo.
HIDE_ON_CLOSE(o padrão para JDialoge JFrame)
Esconda a janela quando o usuário a fechar. Isso remove a janela da tela, mas a deixa exibível.
DISPOSE_ON_CLOSE(o padrão para JInternalFrame)
Oculte e descarte a janela quando o usuário a fechar. Isso remove a janela da tela e libera todos os recursos
usados por ela.
EXIT_ON_CLOSE(definido na JFrameclasse)
Saia do aplicativo usando System.exit(0). Isso é recomendado apenas para aplicativos. Se usado dentro de
um applet, um SecurityExceptionpode ser lançado.

Nota:

DISPOSE_ON_CLOSEpode ter resultados semelhantes a EXIT_ON_CLOSEse apenas uma janela estiver na tela. Mais
precisamente, quando a última janela exibível dentro da máquina virtual Java (VM) é descartada, a VM pode ser
encerrada. Veja AWT Threading Issues para detalhes.

A operação de fechamento padrão é executada depois que qualquer ouvinte de janela manipula o evento de fechamento de
janela. Portanto, por exemplo, suponha que você especifique que a operação de fechamento padrão é descartar um
quadro. Você também implementa um listener de janela que testa se o quadro é o último visível e, em caso afirmativo, salva
alguns dados e sai do aplicativo. Sob essas condições, quando o usuário fecha um quadro, o listener de janela será chamado
primeiro. Se não sair do aplicativo, a operação de fechamento padrão - descarte do quadro - será executada.

Para obter mais informações sobre como manipular eventos de fechamento de janela, consulte Como escrever ouvintes de
janela . Além de manipular eventos de fechamento de janela, os ouvintes de janela também podem reagir a outras mudanças
de estado da janela, como a iconificação e a ativação.
A API do frame

As tabelas a seguir listam os JFrameconstrutores e métodos comumente usados . Outros métodos que você pode querer
chamar são definidos pelos java.awt.Frame, java.awt.Windowejava.awt.Componentaulas, a partir do
qual JFramedesce.

Como cada JFrameobjeto tem um painel raiz, os quadros têm suporte para interpor comportamento de entrada e pintura na
frente dos filhos do quadro, colocando os filhos em "camadas" diferentes e para as barras de menus do Swing. Esses tópicos
são apresentados em Usando contêineres de nível superior e explicados em detalhes em Como usar painéis raiz .

A API para usar frames se enquadra nessas categorias:

 Criando e configurando um quadro


 Definindo o tamanho e o local da janela
 Métodos relacionados ao painel raiz

Criando e configurando um quadro


Método ou Construtor Propósito
Crie um quadro que seja inicialmente invisível. O Stringargumento
JFrame ()
fornece um título para o quadro. Para tornar o quadro visível,
JFrame (String)
invoque setVisible(true)-o.
Defina ou obtenha a operação que ocorre quando o usuário pressiona o
botão Fechar neste quadro. Possíveis escolhas são:

 DO_NOTHING_ON_CLOSE
 HIDE_ON_CLOSE
void setDefaultCloseOperation (int)  DISPOSE_ON_CLOSE
int getDefaultCloseOperation ()  EXIT_ON_CLOSE

As primeiras três constantes são definidas na WindowConstantsinterface,


que JFrameimplementa. A EXIT_ON_CLOSEconstante é definida
na JFrameclasse.
Defina ou obtenha o ícone que representa o quadro. Observe que o
void setIconImage (Image)
argumento é um objeto java.awt.Image , não
Image getIconImage ()
uma javax.swing.ImageIcon(ou qualquer
(in Frame)
outrajavax.swing.Iconimplementação).
void setTitle (String)
String getTitle () Defina ou obtenha o título do quadro.
(em Frame)
Defina ou obtenha se esse quadro deve ser decorado. Funciona apenas se
void setUndecorated (boolean)
o quadro ainda não é exibido (não foi embalado ou
boolean isUndecorated ()
mostrado). Normalmente usado com o modo exclusivo de tela inteira ou
(in Frame)
para ativar as decorações personalizadas da janela.
static void
Determine se os JFrames criados subseqüentemente devem ter suas
setDefaultLookAndFeelDecorated
decorações de janela (como bordas e widgets para fechar a janela)
(boolean)
fornecidas pela aparência atual. Observe que isso é apenas uma dica, pois
static booleano
algumas aparências podem não suportar esse recurso.
isDefaultLookAndFeelDecorated ()
Definindo o tamanho e o local da janela
Método Propósito
void pack () Dimensione a janela de modo que todo o seu conteúdo esteja no tamanho ou acima
(in Window) de seus tamanhos preferidos.
void setSize (int, int)
void setSize (Dimensão) Defina ou obtenha o tamanho total da janela. Os argumentos inteiros
Dimensão getSize () para setSizeespecificar a largura e a altura, respectivamente.
(in Component)
void setBounds (int, int,
int, int) Defina ou obtenha o tamanho e a posição da janela. Para a versão inteira
void setBounds de setBounds, o canto superior esquerdo da janela está no local x, y especificado
(Retângulo) pelos dois primeiros argumentos e tem a largura e a altura especificadas pelos dois
Retângulo getBounds () últimos argumentos.
(in Component)
void setLocation (int, int)
Defina ou obtenha a localização do canto superior esquerdo da janela. Os
Ponto getLocation ()
parâmetros são os valores x e y , respectivamente.
(in Component)
void Posicione a janela de forma que ela fique centralizada sobre o componente
setLocationRelativeTo especificado. Se o argumento é null, a janela é centralizada na tela. Para
(Component) centralizar a janela corretamente, você deve chamar esse método depois que o
(in Window) tamanho da janela tiver sido definido.
Métodos relacionados ao painel raiz
Método Propósito
void setContentPane
(Container) Defina ou obtenha o painel de conteúdo do quadro. O painel de conteúdo contém os
Container componentes visíveis da GUI dentro do quadro.
getContentPane ()
JRootPane
createRootPane ()
void setRootPane Crie, defina ou obtenha o painel raiz do quadro. O painel raiz gerencia o interior do
(JRootPane) quadro, incluindo o painel de conteúdo, o painel de vidro e assim por diante.
JRootPane getRootPane
()
void setJMenuBar
(JMenuBar) Defina ou obtenha a barra de menu do quadro para gerenciar um conjunto de menus
JMenuBar getJMenuBar para o quadro.
()
void setGlassPane
(Component) Defina ou obtenha o painel de vidro. Você pode usar o painel de vidro para
Componente interceptar eventos de mouse ou pintar sobre a GUI do programa.
getGlassPane ()
void setLayeredPane
Defina ou obtenha o painel em camadas de quadros. Você pode usar o painel em
(JLayeredPane)
camadas de quadros para colocar componentes em cima ou atrás de outros
JLayeredPane
componentes.
getLayeredPane ()

You might also like