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.