Orientação a Objetos Componentes: JTable DefaultTableModel / MouseListener Gil Eduardo de Andrade Componente: JTable A classe “JTable” (import java.swing.JTable) • A classe JTable permite a inserção de tabelas de dados em formulários Java (janela); • Normalmente, o JTable é utilizado para apresentar ao usuário os dados armazenados em tabelas do banco de dados; Aula 17: Conexão: JTable / DefaultTableModel – Gil Eduardo de Andrade Componente: JTable A classe “JTable” • Ao instanciar um objeto da classe JTable, não é passado, normalmente, nenhum parâmetro ao seu construtor: – JTable jtb_alunos = new JTable(); Aula 17: Conexão: JTable / DefaultTableModel – Gil Eduardo de Andrade Componente: JTable A classe “JTable” + “JScrollPane” • Como o volume de dados a ser apresentado pelo JTable, normalmente, é grande, torna-se aconselhável vinculá-lo a um JScrollPane; – JScrollPane jsp = new JScrollPane(tb_alunos); Aula 17: Conexão: JTable / DefaultTableModel – Gil Eduardo de Andrade Componente: JTable Métodos da classe “JTable” • Por padrão, um objeto da classe JTable tem sua configuração como Auto-Resize, ou seja, largura das suas colunas são calculadas automaticamente; • Porém, em muitos casos, essa particularidade não é interessante, e para tal utiliza-se o método: setAutoResizeMode(Jtable.AUTO_REZIZE_OFF); Aula 17: Conexão: JTable / DefaultTableModel – Gil Eduardo de Andrade Componente: JTable Métodos da classe “JTable” • Por padrão, um objeto da classe JTable tem como configuração a seleção de uma ou várias linhas da tabela pelo usuário; • Entretanto, quando utilizado para efetuar: insert, update e delete é interessante desabilitar essa configuração, para tal utiliza-se o método: setSelectionMode(ListSelectionModel.SINGLE_SELECTION); Aula 17: Conexão: JTable / DefaultTableModel – Gil Eduardo de Andrade Componente: JTable Métodos da classe “JTable” • Quando o usuário seleciona uma linha da tabela, é possível identificar qual registro foi escolhido, e então efetuar um update ou delete do mesmo; • O método da classe JTable que permite identificar essa seleção é: getSelectedRow(); Aula 17: Conexão: JTable / DefaultTableModel – Gil Eduardo de Andrade Componente: JTable Métodos da classe “JTable” • Para povoar um JTable é preciso utilizar um objeto de uma classe modelo, ou seja, os dados são adicionados a esse objeto e posteriormente ele é agregado ao JTable; • O método da classe JTable que permite agregar esse objeto é: setModel(); Aula 17: Conexão: JTable / DefaultTableModel – Gil Eduardo de Andrade Componente: JTable Exemplo: “JTable” O exemplo acima apresenta apenas o código necessário para instanciar um objeto JTable, utilizar alguns dos seus métodos e vinculá-lo com o JScrollPane – o código-fonte completo encontra-se disponível na seção de exemplos desta aula. Aula 17: Conexão: JTable / DefaultTableModel – Gil Eduardo de Andrade Componente: JTable Exemplo: “JTable” Este exemplo acima já utiliza o conceito de DefaultTableModel, apresentado nos próximos slides – o código-fonte completo encontra-se disponível na seção de exemplos desta aula. Aula 17: Conexão: JTable / DefaultTableModel – Gil Eduardo de Andrade Componente: JTable A classe “DefaultTableModel” (import java.swing.DefaultTableModel) • Assim como acontece com a classe JList, na JTable existe um modelo de dados que recebe as informações a serem apresentadas pelo componente; • No caso do JList utiliza-se a classe de modelo DefaultListModel, já com o JTable é utilizada a classe DefaultTableModel; Aula 17: Conexão: JTable / DefaultTableModel – Gil Eduardo de Andrade Componente: JTable A classe “DefaultTableModel” • Ao instanciar um objeto da classe DefaultTableModel, não é passado, normalmente, nenhum parâmetro ao seu construtor: – DefaultTableModel dtm = new DefaultTableModel(); Aula 17: Conexão: JTable / DefaultTableModel – Gil Eduardo de Andrade Componente: JTable Métodos da classe “DefaultTableModel” • Como a classe DefaultTableModel recebe os dados vindo das tabelas do banco, torna-se importante, antes de adicionar informações ao mesmo, limpar o seu conteúdo, para tal utiliza-se o método setRowCount(0); • Caso seja necessário obter o total de registros armazenados no DefaultTableModel utiliza-se 0 método getRowCount(); Aula 17: Conexão: JTable / DefaultTableModel – Gil Eduardo de Andrade Componente: JTable Métodos da classe “DefaultTableModel” • Após zerarmos as informações de um DefaultTable, temos que informar ao mesmo, o nome dos campos (cabeçalho) a serem apresentados pela tabela; • O método que permite essa ação é: setColumnIdentifiers(array) – que recebe um array como parâmetro, contendo os nomes de todos os campos a serem apresentados; Aula 17: Conexão: JTable / DefaultTableModel – Gil Eduardo de Andrade Componente: JTable Métodos da classe “DefaultTableModel” • Definindo o cabeçalho da tabela (DefaultTable) já é possível adicionar as linhas (Rows) de dados, para isso utiliza-se o método: addRow(Object[]); • O método addRow() recebe como parâmetro um vetor de Objetos, normalmente, objetos da classe String, obtidos das tabelas do Banco de Dados; Aula 17: Conexão: JTable / DefaultTableModel – Gil Eduardo de Andrade Componente: JTable “JTable” + “DefaultTableModel” • Por fim, após ter sido configurado (definido) o cabeçalho do DefaultTableModel e também inserida as informações vindas das tabelas do Banco de Dados é agrado o modelo a classe JTable através do seu método setModel(); Aula 17: Conexão: JTable / DefaultTableModel – Gil Eduardo de Andrade Componente: JTable Exemplo: “JTable” + “DefaultTableModel” O exemplo ao lado apresenta os principais métodos da classe DefaultTableModel. Primeiramente ele é limpo: setRowCount(0), após isso seu cabeçalho é definido: setColumnIdentifiers(array). Então, os dados vindos da tabela são adicionados ao DefaultTableModel, dentro do laço: addRow(Object[]), e por fim ele é vinculado ao JTable: setModel(dtm; O código-fonte completo está disponível na seção de exemplos desta aula. Aula 17: Conexão: JTable / DefaultTableModel – Gil Eduardo de Andrade Eventos: MouseListener Eventos com “JTable” • Assim como visto anteriormente na utilização de componentes gráficos Swing, o JTable também é orientado a eventos; • Sendo assim, para capturarmos a ação, pelo usuário, de selecionar uma linha do JTable precisamos registrar esse evento; Aula 17: Conexão: JTable / DefaultTableModel – Gil Eduardo de Andrade Eventos: MouseListener Eventos com “JTable” • Para o registro desse evento, torna necessária a implementação da interface “MouseListener” e a utilização do método “addMouseListener()”; • O método “MouseClicked()”, entre outros, deve ser declarado e implementado dentro da classe de Controle responsável por implementar a interface “MouseListener”; Aula 17: Conexão: JTable / DefaultTableModel – Gil Eduardo de Andrade Eventos: MouseListener - classe Janela.java (Visualização) - classe Controle.java (Controle) Aula 17: Conexão: JTable / DefaultTableModel – Gil Eduardo de Andrade Eventos: MouseListener Exemplo: Evento JTable O código-fonte completo para o exemplo ao lado encontra-se disponível na seção de exemplos desta aula. Aula 17: Conexão: JTable / DefaultTableModel – Gil Eduardo de Andrade