Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
Programação Orientada a Objetos Professora : Jane * Interface Gráfica com Swing Eventos Aula 10 (parte 2) Professora: Jane Programação Orientada a Objetos Professora : Jane * Objetivo Correção Tabela Exercícios Atenção : Ao fim da aula, depois de fazer os exercícios, verificar se há dúvida no projeto que alterna painéis (explicado em 03/10) Programação Orientada a Objetos Professora : Jane * Tarefa passada na aula 9 – slide 21 CORREÇÃO Use o projeto ExemploComboLista e faça o que se pede: Ao clicar em um nome no 2º. Combo Box (nome do cliente), deverá aparecer uma janela de diálogo informando o cpf do cliente selecionado. Será usado ActionEvent. A solução dada é parcial. Melhore-a, conforme orientação em aula. Programação Orientada a Objetos Professora : Jane * Classe JTable JTable cria uma tabela. Construtores: public JTable() Cria uma tabela vazia. public JTable(int linhas, int colunas) Cria uma tabela vazia com as dimensões especificadas. public JTable(Object[][] dadosTabela, Object[] nomesColunas) Cria uma tabela com os dados da matriz dadosTabela e com as colunas do vetor nomesColunas. public JTable(TableModel modelo) Cria uma tabela a partir do modelo Programação Orientada a Objetos Professora : Jane * JTable Alguns métodos public void addColumn(TableColumn coluna) Adiciona uma coluna no final da tabela. public void clearSelection() Limpa a seleção da tabela. public int[] getSelectedRows() Retorna os índices das linhas selecionadas. public int[] getSelectedColumns() Retorna os índices das colunas selecionadas. public int getColumnCount() Retorna a quantidade de colunas. public int getRowCount() Retorna a quantidade de linhas. public void setValueAt(Object dado, int i, int j) Define o valor da posição (i, j) da tabela. public void setSelectionMode(int modo) Define o tipo de seleção. Recebe os mesmos parâmetros do JList. public TableModel getModel() : retorna o TableModel que provê os dados mostrados pela JTable. Programação Orientada a Objetos Professora : Jane * JTable e Modelos O JTable permite a definição do valor de uma célula individual através do método setValueAt(). Entretanto, a JTable foi projetada para trabalhar com modelos. Uma célula da tabela Programação Orientada a Objetos Professora : Jane * O Swing disponibiliza uma classe abstrata, chamada de AbstractTableModel, que implementa a interface TableModel a partir da qual podemos definir nossos modelos para JTable. A interface TableModel especifica os métodos que JTable irá usar a fim de manipular um modelo de dados tabular. Alguns métodos de TableModel : int getColumnCount() : obtém o número de colunas int getRowCount() : obtém o número de linhas String getColumnName(int col) : retorna o nome da coluna col Object getValueAt(int indLinha, int indColuna) : retorna o valor da célula de linha indLinha e coluna indColuna void setValueAt (Object aValue, int indLinha, int indColuna) : define o valor na célula de linha indLinha e coluna indColuna. Programação Orientada a Objetos Professora : Jane * Usando scrolls Exemplo : JTable tabela = new JTable(modelo); JScrollPane scrollpane = new JScrollPane(tabela); Para obter o modelo temos o método getModel (vide slide 5) : public TableModel getModel() : retorna o TableModel que provê os dados mostrados pela JTable. modelo é um TableModel, por exemplo Objeto de JTable Programação Orientada a Objetos Professora : Jane * Exemplo : Criando tabela com dados específicos Considerando JTable table; String[] colunas = {"Nome", "Sobrenome”}; Object[][] data = { {"Maria" , "Silva”}, {"Tei" , "Ping”}, {"Victor" , "Valentim”}, {"Gisele" , "Beach"}, {"Maricota", "Silva“} }; table = new JTable(data, colunas); Veja a parte inicial do projeto Aula10_Tabela_EX1 Programação Orientada a Objetos Professora : Jane * Evento : TableModelEvent Interface : TableModelListener É preciso implementar a interface TableModelListener public interface TableModelListener extends EventListener TableModelListener define a interface para um objeto que “ouve” (listens) as mudanças em uma TableModel. Nesta interface é encontrado o método tableChanged. Veja a assinatura : void tableChanged(TableModelEvent e) Podemos informar as células, linhas ou colunas que mudaram. NOTE: change significa mudar. Programação Orientada a Objetos Professora : Jane * Associando a fonte do evento ao ouvinte Para associar o ouvinte a fonte do evento usamos o método addTableModelListener() Exemplo : tabela.getModel().addTableModelListener(obj); onde tabela é um objeto de JTable previamente definido e obj é um objeto de uma classe ouvinte. Lembrando ... A classe ouvinte deverá implementar o método tableChanged da interface TableModelListener. Volte ao projeto ! Volte ao restante do projeto Aula10_Tabela_EX1 Programação Orientada a Objetos Professora : Jane * Alguns métodos de TableModelEvent int getColumn() : retorna a coluna para o evento. int getFirstRow() : retorna a 1a. linha que mudou. int getLastRow() : retorna a última linha que mudou. Métodos herdados de java.util.EventObject : getSource() e toString() Programação Orientada a Objetos Professora : Jane * Mais evento ... MouseEvent Note que o projeto exemplo usa o evento MouseEvent. Podemos clicar em qualquer célula da tabela e daí realizar algo desejado. Nossa classe possui o seguinte trecho: private class Ouvinte extends MouseAdapter { @Override public void mouseClicked(MouseEvent e) { imprimirDados(table); } } Programação Orientada a Objetos Professora : Jane * MouseListener e MouseAdapter A interface MouseListener possui 5 métodos, dos quais nos interessa apenas o método abaixo : mouseClicked(MouseEvent e) : Invocado quando o botão do mouse tiver sido clicado (pressionado ou solto) sobre um componente. Como a MouseListener possui uma classe adaptadora, a MouseAdapter, nós a usaremos e implementaremos apenas o método que nos interessar, que no caso é o método mouseClicked. Programação Orientada a Objetos Professora : Jane * Exemplo : Outra aplicação com tabela Projeto : ExemploComboListaTabela Nesta aplicação será usada a classe DefaultTableModel, que é subclasse de AbstractTableModel. Classe DefaultTableModel (implementa a interface TableModel) Construtor : DefaultTableModel() : constrói um DefaultTableModel padrão que é uma tabela sem linha e sem coluna. Métodos : 2) void addColumn(Object columnName) : adiciona uma coluna ao modelo. 3) void addRow(Object[] rowData) : adiciona uma linha ao final do modelo. Note Object [] é um vetor de Object. Programação Orientada a Objetos Professora : Jane * Trecho do projeto ExemploComboListaTabela Trecho da aplicação : // Cria um modelo para a tabela DefaultTableModel modeloTabela = new DefaultTableModel(); modeloTabela.addColumn("CPF"); modeloTabela.addColumn("Nome"); // Cria uma tabela vazia com o modelo definido JTable tblTabela = new JTable(modeloTabela); Veja o projeto ExemploComboListaTabela, mas antes veja o próximo slide. Programação Orientada a Objetos Professora : Jane * No projeto usamos ... Mais métodos para serem usados com objetos de JTable ListSelectionModel getSelectionModel() : retorna o modelo de seleção corrente. int getSelectedRow() : retorna o índice da 1a. linha selecionada. Se nenhuma linha for selecionada, será retornado -1. Mais um método de DefaultListModel (ver esta classe na aula 9) que aparece nesta aplicação da aula 10 (parte 2) : Object getElementAt(int indice) : retorna o componente na posição especificada por indice. Programação Orientada a Objetos Professora : Jane * Por curiosidade ... A classe JTable implementa as interfaces abaixo, dentre outras : public class JTable extends JComponent implements TableModelListener, TableColumnModelListener, ListSelectionListener Programação Orientada a Objetos Professora : Jane * Tarefas Considere o projeto Aula10_Tabela_Ex1. Sabe-se que é possível modificar uma célula da tabela. Considere que haja tal mudança e imprima na saída padrão o novo valor da célula após a mudança, além da linha e da coluna onde houve mudança (change). Pesquise nos métodos de TableModel. Gabarito : Arquivo Aula10_Tabela_Ex1 (projetos completos) 2) Considere o projeto ExemploComboListaTabela. O objetivo é clicar em uma linha da tabela e então expor os dados da linha selecionada nos labels à direita da tabela. Para isso, acrescente código ao método valueChanged. Gabarito : Arquivo ExemploComboListaTabela (projetos completos) Programação Orientada a Objetos Professora : Jane * 3) Considere a interface abaixo e faça o que se pede no próximo slide : O gabarito será encontrado, em breve, no projeto TarefaTabelaFixacao. Programação Orientada a Objetos Professora : Jane * Objetivos : Obter a matrícula e a média de um aluno através de 2 textfields e adicionar as entradas em uma tabela, após ser acionado o botão >>>>. Acionada uma linha da tabela, seus dados deverão ser copiados para dois labels à direita da tabela. Veja os labels Matrícula e Média. Eventos : Clique no botão >>>, o que provocará a inserção dos dados dos textfields na tabela. Enter nos textfields, o que provocará a limpeza dos campos de entrada. 3) Seleção de um item da tabela, o que provocará a cópia da matrícula e da média para o label.