JAVA Gerenciadores de Layout Tiago Alves de Oliveira 1
Introdução Layout para impor algum tipo de forma em uma interface projetada com o AWT, deve-se usar um conjunto de classes chamadas gerenciadores de layout a linguagem JAVA é implementada em várias plataformas diferentes e existem diferenças sutis no modo como cada uma apresenta itens como botões, barras de rolagem etc. algumas ferramentas de desenvolvimento JAVA permitem usar coordenadas absolutas 2
Introdução Gerenciadores determinam como os componentes serão organizados ao serem inseridos em um container o AWT inclui cinco gerenciadores de layout básicos: FlowLayout (default) BorderLayout CardLayout GridLayout GridBagLayout 3
Introdução Layout de Fluxo a classe FlowLayout representa o mais simples dos gerenciadores de layout essa classe permite que os componentes fluam da esquerda para a direita, na ordem em que eles são inseridos em um container quando não houver mais espaço, uma nova linha de componentes começará imediatamente abaixo da primeira e a ordem da esquerda para a direita continuará 4
Introdução Layout de Fluxo o construtor FlowLayout(int alinhamento, int disthoriz, int distvert) recebe os três argumentos a seguir, em ordem: o alinhamento, que deve ser FlowLayout.LEFT, FlowLayout.CENTER ou FlowLayout.RIGHT a distância horizontal entre os componentes, em pixels a distância vertical, em pixels por default, os componentes de cada linha serão centralizados quando o construtor FlowLayout() for usado sem argumentos 5
Exemplo 6
Introdução Layout de Borda os layouts de borda, que são criados usando-se a classe BorderLayout, dividem um container em cinco seções: NORTH (norte), SOUTH (sul), EAST (leste), WEST (oeste) e CENTER (centro) os componentes dos quatro pontos cardeais ocupam o máximo espaço de que necessitarem, sendo que o centro ocupará o espaço restante 7
Introdução Layout de Borda um layout de borda é criado com os construtores BorderLayout() ou BorderLayout(int disthoriz, int distvert). O primeiro construtor cria um layout de borda sem intervalo entre os componentes. O segundo construtor especifica o intervalo horizontal e o intervalo vertical a maneira de incluir um layout de borda em um container é diferente 8
Exemplo 9
Introdução Resultado 10
Introdução Layout de Carta os layouts de carta diferem dos outros layouts porque eles ocultam alguns componentes é um grupo de containers ou componentes que são exibidos um por vez. Cada container é chamado de carta o modo normal de usar um layout de carta é utilizar um painel para cada carta os componentes são inseridos nos painéis e, os painéis no container que está definido 11
Introdução Layout de Carta um layout de carta é criado a partir da classe CardLayout para inserir cartas no layout deve-se usar o método add(string rotulo, container objeto). O primeiro argumento é uma string que representa o nome da carta. O segundo especificar o container ou componente que é a carta. Se for um container, todos os componentes deverão ter sido incluídos nele, antes que a carta seja inserida 12
Introdução Layout de Carta após ter adicionado uma carta ao container principal de um programa, como a janela JFrame, você pode usar o método show() de seu gerenciador de layout de carta para apresentar uma carta. O método show() recebe dois argumentos: o container em que todas as cartas foram inseridas. Se o container for o frame, você poderá usar a palavra-chave this o nome que foi dado à carta 13
Exemplo 14
Introdução Exemplo 15
Exemplo 2 16
Introdução Resultado 17
Introdução Layout de Grade o gerenciador de layout de grade organiza os componentes em uma grade de linhas e colunas os componentes são incluídos primeiramente na linha superior da grade, começando com a célula mais à esquerda e continuando à direita na grade quando todas as células da linha superior estiverem preenchidas, o próximo componente será inserido na célula mais à esquerda da segunda linha (se houver)... 18
Introdução Layout de Grade os layouts de grade são criados com a classe GridLayout quatro argumentos podem ser enviados para o construtor GridLayout(int linhas, int colunas, int disthoriz, int distvert): o número de linhas na grade, o número de colunas, a distância horizontal e a vertical o distanciamento padrão entre os componentes no layout de grade é de 0 pixels nas direções vertical e horizontal 19
Introdução Layout de Grade no layout de grade, um componente sempre ocupará o espaço inteiro de uma célula, ou seja, os componentes se expandem para preencher o espaço disponível em cada célula Observe que quando a janela é redimensionada os componentes mudam de tamanho 20
Exemplo 21
Resultado 22
Layout de Grade de Conteúdo é uma extensão do gerenciador de layout de grade, diferindo deste com relação ao seguinte: um componente pode ocupar mais de uma célula na grade as proporções entre as diferentes linhas e colunas não precisam ser iguais os componentes dentro das células da grade podem ser organizados de diferentes maneiras 23
Layout de Grade de Conteúdo para criar um layout de grade de conteúdo usa-se a classe GridBagLayout e uma classe auxiliar chamada GridBagConstraints GridBagLayout é o gerenciador de layout e GridBagConstraints é usada para definir as propriedades de cada componente a ser colocado na célula (posicionamento, dimensões, alinhamento...) o relacionamento entre a grade de conteúdo, as restrições e cada componente define o layout global 24
Layout de Grade de Conteúdo em sua forma mais geral, a criação de um layout de grade de conteúdo envolve as seguintes etapas: criar um objeto GridBagLayout e defini-lo como o gerenciador de layout atual criar uma nova instância de GridBagConstraints estabelecer as restrições de um componente informar o gerenciador de layout a respeito do componente e de suas restrições inserir o componente no container 25
projete a grade primeiro lugar para se começar o layout de grade de conteúdo é no papel crie a grade retorne a linguagem JAVA e comece a implementar o layout que acabou de desenhar determine as proporções de linhas e colunas em relação às outras linhas e colunas adicione e organize os componentes faça ajustes Layout de Grade de Conteúdo 26
Layout de Grade de Conteúdo gridx e gridy: são as coordenadas da célula que contém esse componente gridwidth e gridheight: representam o número de células que esse componente abrange weightx e weighty: são usados para definir as proporções das colunas e linhas (podemos pensar em %) 27
Layout de Grade de Conteúdo fill: determina - para componentes que podem ser alongados nas duas direções - em que direção vai haver o alongamento. Pode ter quatro valores: GridBagConstraints.BOTH GridBagConstraints.NONE (default) GridBagConstraints.HORIZONTAL GridBagConstraints.VERTICAL 28
Layout de Grade de Conteúdo anchor: essa restrição se aplica apenas aos componentes que não estão preenchendo a célula inteira, dizendo onde, dentro da célula, deve ser colocado o componente. Os valores possíveis são: GridBagConstraints.NORTH GridBagConstraints.SOUTH GridBagConstraints.NORTHEAST GridBagConstraints.SOUTHWEST GridBagConstraints.EAST GridBagConstraints.WEST GridBagConstraints.SOUTHEAST GridBagConstraints.NORTHWEST GridBagConstraints.CENTER (default) 29
Layout de Grade de Conteúdo ipadx e ipady: são utilizados para determinar o espaçamento entre os componentes em um painel, ou seja especifica o preenchimento interno ao redor do componente; ipadx: adiciona espaço extra nos dois lados do componente ipady: adiciona espaço extra em cima e embaixo do componente 30
Layout de Grade de Conteúdo insets: são usadas para determinar o espaço em torno do próprio painel a classe Insets inclui valores para insets acima, esquerda, abaixo e à direita, que são então usados quando o próprio painel é desenhado as insets determinam o espaço entre as margens de um painel e seus componentes 31
Layout de Grade de Conteúdo Quando você dominar o desenvolvimento de uma interface com o usuário em JAVA, seus programas poderão oferecer algo que a maioria das outras linguagens de programação visuais não consegue: uma interface que funciona em várias plataformas sem modificação 32
Exemplo 33
Exemplo 34
Exemplo 35
Resultado Grade de Conteúdo 36
Mapa das Propriedades anchor = east anchor = west fill = horizontal gridwidth = 3 gridx ipady gridheigth= 1 0 1 2 3 gridy 0 1 2 3 4 jlabel1 jlabel2 jtextfield1 jtextfield2 jbutton gridwidth = 1 gridheigth= 1 gridwidth = 2 gridheigth= 1 jpanel1 anchor = center insets ipadx 37
Resumindo gridx: coluna da célula gridy: linha da célula gridwidth: quant. de células na horizontal gridheigth: quant. de células na vertical weightx: proporção da coluna weighty: proporção da linha fill: alongamento do componente na região anchor: posição da região - células ipady: espaço extra em cima e embaixo ipadx: espaço extra esquerda e direita insets: espaço em torno da região - células 38
Layout Nulo (Null) Posiciona os componentes de acordo com a posição absoluta, ou seja, coloca os componentes no Frame de acordo com as posições que o programador definir pelas coordenadas x e y do Frame ou painel. Não é aconselhável, pode-se perder os benefícios oferecidos pelo Swing em plataformas diferentes. 39
Layout Nulo (Null) 40
Layout Nulo (Null) 41