Java - Tabelas
De Aulas
Afluentes: Programação em Java
Modelos de Dados
- Para trabalhar com Tabelas, precisamos trabalhar com Modelos de Dados (TableModel);
- A maioria dos componentes do Swing permite que seus dados venham de classes separadas, conhecidas como Modelos;
- A seguir é mostrado um exemplo de uma tabela para apresentar uma lista de pessoas.
Classe Pessoa
A classe Pessoa é usada para representar as informações que são usados pelo TableModel.
public class Pessoa {
private String nome;
private int idade;
private boolean brasileiro;
public Pessoa(String nome, int idade, boolean brasileiro) {
setNome(nome);
setIdade(idade);
setBrasileiro(brasileiro);
}
// Getters e Setters
public String getNome() {
return this.nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public int getIdade() {
return this.idade;
}
public void setIdade(int idade) {
this.idade = idade;
}
public boolean isBrasileiro() {
return this.brasileiro;
}
public void setBrasileiro(boolean brasileiro) {
this.brasileiro = brasileiro;
}
}
Classe PessoaTableModel
A TableModel é o objeto que gerencia e organiza os dados na tabela. Faz a interface entre os dado e a tabela (apresentação visual).
1import java.util.ArrayList;
2import java.util.List;
3
4import javax.swing.table.AbstractTableModel;
5
6public class PessoaTableModel extends AbstractTableModel {
7 private static final long serialVersionUID = 1L;
8 private List<Pessoa> pessoas = new ArrayList<Pessoa>();
9
10 public void setPessoas(List<Pessoa> pessoas) {
11 this.pessoas.clear();
12 this.pessoas.addAll(pessoas);
13
14 // fireTableDataChanged abaixo é um metodo herdado
15 // do AbstractTableModel que avisa a tabela que os
16 // dados foram alterados.
17
18 fireTableDataChanged();
19 }
20
21 public int getRowCount() {
22 return pessoas.size();
23 }
24
25 public int getColumnCount() {
26 return 3;
27 }
28
29 public Object getValueAt(int rowIndex, int columnIndex) {
30 Pessoa p = pessoas.get(rowIndex);
31 switch (columnIndex) {
32 case 0:
33 return p.getNome();
34 case 1:
35 return p.getIdade();
36 case 2:
37 return p.isBrasileiro();
38 default:
39 return null;
40 }
41 }
42
43 public String getColumnName(int columnIndex) {
44 switch (columnIndex) {
45 case 0:
46 return "Nome";
47 case 1:
48 return "Idade";
49 case 2:
50 return "Brasileiro";
51 default:
52 return null;
53 }
54 }
55
56 public Class<?> getColumnClass(int columnIndex) {
57 switch (columnIndex) {
58 case 0:
59 return String.class;
60 case 1:
61 return Integer.class;
62 case 2:
63 return Boolean.class;
64 default:
65 return null;
66 }
67 }
68}
Criando a Tabela
1import java.util.ArrayList;
2import java.util.List;
3import java.awt.*;
4import javax.swing.JFrame;
5import javax.swing.JScrollPane;
6import javax.swing.JTable;
7
8public class Tabela extends JFrame {
9 private static final long serialVersionUID = 1L;
10
11 public Tabela() {
12 super("Gerenciando Tabelas no Java");
13 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
14 setLayout(new BorderLayout());
15
16 List<Pessoa> pessoas = new ArrayList<Pessoa>();
17 pessoas.add(new Pessoa("Carlos", 25, true));
18 pessoas.add(new Pessoa("Juliana", 18, true));
19 pessoas.add(new Pessoa("John", 40, false));
20
21 // Modelo lógico
22 PessoaTableModel ptm = new PessoaTableModel();
23 ptm.setPessoas(pessoas);
24
25 // Componente Gráfico
26 JTable tabela = new JTable();
27 tabela.setModel(ptm);
28
29 // Coloca a tabela em uma caixa com barra de rolagem
30 add(new JScrollPane(tabela), BorderLayout.CENTER);
31 pack();
32 setVisible(true);
33 }
34
35 public static void main(String[] args) {
36 new Tabela();
37 }
38}
Atividade
Faça um programa em Java usando Swing e AWT para criar uma interface de entrada de dados para uma tabela. O programa deve ter uma interface parecida com a apresentada abaixo:
|
Resolução
Classe Contato
1public class Contato {
2 private String nome;
3 private int idade;
4 private String telefone;
5 private String email;
6
7 public Contato(String nome, int idade, String telefone, String email) {
8 setNome(nome);
9 setIdade(idade);
10 setTelefone(telefone);
11 setEmail(email);
12 }
13
14 public String getNome() {
15 return this.nome;
16 }
17
18 public void setNome(String nome) {
19 this.nome = nome;
20 }
21
22 public int getIdade() {
23 return this.idade;
24 }
25
26 public void setIdade(int idade) {
27 this.idade = idade;
28 }
29
30 public String getTelefone() {
31 return this.telefone;
32 }
33
34 public void setTelefone(String telefone) {
35 this.telefone = telefone;
36 }
37
38 public String getEmail() {
39 return this.email;
40 }
41
42 public void setEmail(String email) {
43 this.email = email;
44 }
45}
Classe ContatoTableModel
1import java.util.ArrayList;
2import java.util.List;
3import javax.swing.table.AbstractTableModel;
4
5public class ContatoTableModel extends AbstractTableModel {
6 private static final long serialVersionUID = 1L;
7 private List<Contato> contatos = new ArrayList<Contato>();
8
9 public void setContatos(List<Contato> contatos) {
10 this.contatos.clear();
11 this.contatos.addAll(contatos);
12 fireTableDataChanged();
13 }
14
15 public int getRowCount() {
16 return contatos.size();
17 }
18
19 public int getColumnCount() {
20 return 4;
21 }
22
23 public Object getValueAt(int rowIndex, int columnIndex) {
24 Contato c = contatos.get(rowIndex);
25 switch (columnIndex) {
26 case 0:
27 return c.getNome();
28 case 1:
29 return c.getIdade();
30 case 2:
31 return c.getTelefone();
32 case 3:
33 return c.getEmail();
34 default:
35 return null;
36 }
37 }
38
39 public String getColumnName(int columnIndex) {
40 switch (columnIndex) {
41 case 0:
42 return "Nome";
43 case 1:
44 return "Idade";
45 case 2:
46 return "Telefone";
47 case 3:
48 return "E-mail";
49 default:
50 return null;
51 }
52 }
53
54 public Class<?> getColumnClass(int columnIndex) {
55 switch (columnIndex) {
56 case 0:
57 return String.class;
58 case 1:
59 return Integer.class;
60 case 2:
61 return String.class;
62 case 3:
63 return String.class;
64 default:
65 return null;
66 }
67 }
68}
Classe Agenda
1import java.util.ArrayList;
2import java.util.List;
3import java.awt.*;
4import javax.swing.*;
5
6public class Agenda extends JFrame {
7 private static final long serialVersionUID = 1L;
8
9 public Agenda() {
10 super("Agenda Telefônica");
11 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
12 setLayout(new BorderLayout());
13
14 JPanel entradas = new JPanel();
15 entradas.setLayout(new GridLayout(0,2));
16
17 entradas.add(new JLabel("Nome:"));
18 final JTextField nome = new JTextField(20);
19 entradas.add(nome);
20
21 entradas.add(new JLabel("Idade:"));
22 final JTextField idade = new JTextField(20);
23 entradas.add(idade);
24
25 entradas.add(new JLabel("Telefone:"));
26 final JTextField telefone = new JTextField(20);
27 entradas.add(telefone);
28
29 entradas.add(new JLabel("E-mail:"));
30 final JTextField email = new JTextField(20);
31 entradas.add(email);
32
33 final JButton btGravar = new JButton("Gravar");
34 entradas.add(btGravar);
35
36 final JButton btClear = new JButton("Limpara Campos");
37 entradas.add(btClear);
38
39 add(entradas, BorderLayout.NORTH);
40
41 List<Contato> contatos = new ArrayList<Contato>();
42 contatos.add(new Contato("Carlos", 25, "1234", "carlos@gmail.com"));
43 contatos.add(new Contato("Juliana", 18, "3423423", "juliana@hotmail.com"));
44 contatos.add(new Contato("John", 40, "3423234", "john@watson.com"));
45
46 ContatoTableModel ptm = new ContatoTableModel();
47 ptm.setContatos(contatos);
48 JTable tabela = new JTable();
49 tabela.setModel(ptm);
50 add(new JScrollPane(tabela), BorderLayout.CENTER);
51 pack();
52 setVisible(true);
53 }
54
55 public static void main(String[] args) {
56 new Agenda();
57 }
58}