Componentes Parte 03 Prof. Edwar Saliba Júnior Setembro de 2012 Unidade 05 Componentes Parte 03 1
JTable Componente capaz de mostrar dados na tela de maneira tabular. Partes visuais do JTable: Título: formado por um vetor de strings; Dados: formado por uma matriz de objects. É bom saber: os dados passados ao JTable ficam alojados num objeto TableModel, o qual provê métodos para facilitar o acesso a estes dados; caso você não crie seu próprio modelo de dados, então será usado o DefaultTableModel automaticamente. Unidade 05 Componentes Parte 03 2
Principais métodos: Programação Visual JTable Construtor: são diversos. Um dos mais simples que você pode usar é o construtor com dois parâmetros: JTable(dados,colunas), onde dados geralmente é uma matriz de objects ou strings e colunas um vetor de strings contendo o título das colunas; getmodel() - este método nos retorna o modelo de dados utilizado no JTable. Se você não criou seu próprio modelo de dados então o seu JTable está fazendo uso do DefaultTableModel, uma implementação de modelo de dados simples, através arrays. Ele implementa alguns métodos básicos para manipulação do modelo; getrowcount() - retorna a quantidade de linhas existentes no JTable; getcolumncount() - retorna a quantidade de colunas existentes no JTable; Unidade 05 Componentes Parte 03 3
Principais métodos: Programação Visual JTable setselectionmode(constante) - configura o modo de seleção de linhas para do Jtable de acordo com a constante escolhida. E esta poderá ser: ListSelectionModel.SINGLE_SELECTION permite a seleção de uma única linha; ListSelectionModel.SINGLE_INTERVAL_SELECT ION permite a seleção de um intervalo contíguo de linhas; ListSelectionModel.MULTIPLE_INTERVAL_SELE CTION permite a seleção de vários intervalos de linhas. Unidade 05 Componentes Parte 03 4
DefaultTableModel Principais métodos: getvalueat() - obtém o valor de uma determinada célula (coluna e linha); setvalueat() - configura o valor de uma determinada célula (coluna e linha); addrow() - adiciona uma nova linha no modelo. Recebe um vetor; addcolumn() - adiciona uma nova coluna no modelo; removerow() - remove um linha do modelo; removecolumn() - remove uma coluna do modelo; etc. Unidade 05 Componentes Parte 03 5
Exemplo Criação de JTable Pode-se criar o JTable e deixar que ele crie o TableModel: Ou podemos criar o modelo de dados (TableModel) e passar para o JTable: Unidade 05 Componentes Parte 03 6
JTable - DefaultTableModel Unidade 05 Componentes Parte 03 7
Exemplo 01 - JTable Parte 01 - Classe Main. Parte 02 - Classe SimpleTable Unidade 05 Componentes Parte 03 8
TableModel Personalizado Usar o DefaultTableModel em suas aplicações, tem suas vantagens e desvantagens: Vantagem: Você não precisa implementar nada; Desvantagens: Você só consegue criar tabelas com as estruturas prédefinidas no construtor da classe JTable; o único construtor que trabalha com memória dinâmica usa a classe Vector, que já está ultrapassada em relação as novas estruturas da linguagem, que por sua vez, desaconselha seu uso. Solução: Criar um TableModel personalizado. Unidade 05 Componentes Parte 03 9
TableModel Personalizado Usar estrutura dinâmica de alocação de memória, exemplo: ArrayList. Criar métodos que ensinem o novo TableModel a manipular este novo tipo de estrutura. Criar os métodos o mais genérico possível. Atentar-se para detalhes de edição de células que podem fazer o funcionamento do seu TableModel Personalizado divergir do DefaultTableModel. Unidade 05 Componentes Parte 03 10
TableModel Personalizado Principais passos: a classe deve herdar de AbstractTableModel; deverá ter atributos para armazenar os valores de linhas e colunas; o construtor deverá receber como parâmetro variáveis que inicializem estes atributos; criar os métodos get e set dos atributos; criar os métodos: addrow, removerow (por índice), removerow (por valor e coluna). sobrescrever os métodos: getrowcount, getcolumncount, getvalueat, setvalueat, iscelleditable e getcolumnname. Unidade 05 Componentes Parte 03 11
JTable - NewTableModel Unidade 05 Componentes Parte 03 12
Exemplo 02 - TableModelPersonalizado Parte 01 - Classe Main. Parte 02 - Classe SimpleTable Parte 03 - Classe NewTableModel Unidade 05 Componentes Parte 03 13
Gerenciadores de Layout Em Java, pode-se definir o layout de uma tela para melhor adaptar a sua apresentação para o usuário. Java possui os seguintes layouts pré-definidos: Border Layout; Box Layout; Card Layout; Flow Layout; GridBag Layout; Group Layout e Spring Layout. Unidade 05 Componentes Parte 03 14
BorderLayout Como pode ser visto na imagem abaixo, um BorderLayout pode colocar componentes em uma de suas 5 áreas: top, bottom, left, right e center. Unidade 05 Componentes Parte 03 15
Exemplo 03 BorderLayout Parte 01 Unidade 05 Componentes Parte 03 16
Exemplo 03 BorderLayout Parte 02 Unidade 05 Componentes Parte 03 17
BoxLayout Esta classe coloca os componentes em uma linha ou em uma coluna. A classe respeita a requisição de tamanho máximo dos componentes e também permite que o programador os alinhem. Unidade 05 Componentes Parte 03 18
Exemplo 04 BoxLayout Parte 01 Unidade 05 Componentes Parte 03 19
Exemplo 04 BoxLayout Parte 02 Alinha os componentes em uma linha, semelhante a se usar: X_AXIS. Já as opções: Y_AXIS e PAGE_AXIS alinham os componentes verticalmente. Unidade 05 Componentes Parte 03 20
CardLayout Esta classe permite que o programador coloque diferentes componentes, num mesmo espaço em tempos distintos. Um CardLayout é controlado por um componente Combo Box e o estado deste componente determina qual painel (conjunto de componentes) será mostrado em determinado momento. Unidade 05 Componentes Parte 03 21
Exemplo 05 - CardLayout Parte 01 - Classe Main Parte 02 - Classe ExemploCardLayout Unidade 05 Componentes Parte 03 22
FlowLayout Este é o gerenciador de layouts padrão de todo JPanel. Ele simplesmente coloca os componentes numa mesma linha até que o tamanho do contêiner não seja suficiente, então o gerenciador começa outra linha de componentes logo abaixo. Os componentes podem ter seus locais de alinhamento alterados em tempo de execução. Unidade 05 Componentes Parte 03 23
Exemplo 06 - FlowLayout Parte 01 - Classe Main Parte 02 - Classe ExemploFlowLayout Unidade 05 Componentes Parte 03 24
GridBagLayout Este é um dos gerenciadores de layouts mais sofisticados e flexíveis. Ele alinha os componentes colocando-os dentro de uma grade de células, permitindo que um componente expanda seu tamanho por mais de uma célula. As linhas da grade e as colunas podem possuir tamanhos variados. Unidade 05 Componentes Parte 03 25
Exemplo 07 - GridBagLayout Parte 01 - Classe Main Parte 02 - Classe ExemploGridBagLayout Unidade 05 Componentes Parte 03 26
GridLayout Este gerenciador de layouts monta um grupo de componentes, todos com o mesmo tamanho e os exibe em um determinado número de linhas e colunas. Unidade 05 Componentes Parte 03 27
Visualização do GridLayout Unidade 05 Componentes Parte 03 28
Exemplo 08 - GridLayout Parte 01 - Classe Main Parte 02 - Classe GridLayout Unidade 05 Componentes Parte 03 29
GroupLayout Este gerenciador de layouts foi desenvolvido para ser usado por softwares construtores de interfaces gráficas, porém, pode ser usado manualmente. GroupLayout trabalha com layouts verticais e horizontais separadamente. O layout é definido por cada dimensão independentemente. Consequentemente, cada componente precisa ser definido duas vezes no layout (vertical e horizontal). Unidade 05 Componentes Parte 03 30
Exemplo 09 - GroupLayout Parte 01 - Classe Main Parte 02 - Classe GroupLayout Unidade 05 Componentes Parte 03 31
SpringLayout Este gerenciador de layouts também foi desenvolvido para ser usado por softwares construtores de interfaces gráficas. SpringLayout permite que seja especificado distâncias precisas entre as quinas dos componentes, através de seus controles. Exemplo: pode-se determinar que a quina esquerda de um componente possua uma determinada distância da quina direita de outro componente (tudo calculado dinamicamente). Unidade 05 Componentes Parte 03 32
Orientação no Componente Usando SpringLayout SpringLayout.NORTH - especifica o topo (borda da parte de cima) do componente. SpringLayout.SOUTH - especifica o fundo (borda da parte de baixo) do componente. SpringLayout.EAST - especifica o lado direito (borda do lado direito) do componente. SpringLayout.WEST - especifica o lado esquerdo (borda do lado esquerdo) do componente. SpringLayout.BASELINE - especifica a base de um componente. SpringLayout.HORIZONTAL_CENTER - especifica o centro horizontal do componente. SpringLayout.VERTICAL_CENTER - especifica o centro vertical do componente. Unidade 05 Componentes Parte 03 33
Exemplo 10.01 - SpringBox Unidade 05 Componentes Parte 03 34
Exemplo 10.02 - CompactSpringGrid Unidade 05 Componentes Parte 03 35
Exemplo 10.03 - SpringGrid Unidade 05 Componentes Parte 03 36
Exemplo 10.04 - SpringDemo1 Unidade 05 Componentes Parte 03 37
Exemplo 10.05 - SpringDemo2 Unidade 05 Componentes Parte 03 38
Exemplo 10.06 - SpringDemo3 Unidade 05 Componentes Parte 03 39
Exemplo 10.07 - SpringForm Unidade 05 Componentes Parte 03 40
Exemplo 10 SpringLayout Parte 01 - Classe Main Parte 02 - Classe SpringUtilities Parte 03.01 - Classe SpringBox Parte 03.02 - Classe SpringCompactGrid Parte 03.03 - Classe SpringDemo1 Parte 03.04 - Classe SpringDemo2 Parte 03.04 - Classe SpringDemo3 Parte 03.05 - Classe SpringForm Parte 03.06 - Classe SpringGrid Unidade 05 Componentes Parte 03 41
Bibliografia DEITEL, H. M.; DEITEL, P. J. Java Como Programar; 6. ed., São Paulo: Pearson, 2005. LIMA, Bruno Rios. Tutorial sobre JTable do Swing Parte 01. Disponível em: <http://www.guj.com.br/articles/140> Acesso em: 25 out. 2012. LIMA, Bruno Rios. Tutorial sobre JTable do Swing Parte 02. Disponível em: <http://www.guj.com.br/articles/147> Acesso em: 25 out. 2012. ORACLE. The Java Tutorials. How to Use Tables. Disponível em: <http://docs.oracle.com/javase/tutorial/uiswing/components/table.html> Acesso em: 30 out. 2012. ORACLE. A Visual Guide to Layout Managers. Disponível em: <http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html> Acesso em: 01 nov. 2012. Unidade 05 Componentes Parte 03 42