Mudanças entre as edições de "Java - Tabelas"
De Aulas
(4 revisões intermediárias pelo mesmo usuário não estão sendo mostradas) | |||
Linha 57: | Linha 57: | ||
<center>[[Image:Swing_tablemodel00.png]]</center> | <center>[[Image:Swing_tablemodel00.png]]</center> | ||
− | <syntaxhighlight lang=java | + | <syntaxhighlight lang=java> |
import java.util.ArrayList; | import java.util.ArrayList; | ||
import java.util.List; | import java.util.List; | ||
Linha 132: | Linha 132: | ||
<center>[[Image:Swing_tablemodel01.png]]</center> | <center>[[Image:Swing_tablemodel01.png]]</center> | ||
− | <syntaxhighlight lang=java | + | <syntaxhighlight lang=java> |
import java.util.ArrayList; | import java.util.ArrayList; | ||
import java.util.List; | import java.util.List; | ||
Linha 185: | Linha 185: | ||
== Classe Contato == | == Classe Contato == | ||
− | <syntaxhighlight lang=java | + | <syntaxhighlight lang=java> |
public class Contato { | public class Contato { | ||
private String nome; | private String nome; | ||
Linha 235: | Linha 235: | ||
== Classe ContatoTableModel == | == Classe ContatoTableModel == | ||
− | <syntaxhighlight lang=java | + | <syntaxhighlight lang=java> |
import java.util.ArrayList; | import java.util.ArrayList; | ||
import java.util.List; | import java.util.List; | ||
Linha 308: | Linha 308: | ||
== Classe Agenda == | == Classe Agenda == | ||
− | <syntaxhighlight lang=java | + | <syntaxhighlight lang=java> |
import java.util.ArrayList; | import java.util.ArrayList; | ||
import java.util.List; | import java.util.List; |
Edição atual tal como às 12h46min de 9 de abril de 2024
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).
import java.util.ArrayList;
import java.util.List;
import javax.swing.table.AbstractTableModel;
public class PessoaTableModel extends AbstractTableModel {
private static final long serialVersionUID = 1L;
private List<Pessoa> pessoas = new ArrayList<Pessoa>();
public void setPessoas(List<Pessoa> pessoas) {
this.pessoas.clear();
this.pessoas.addAll(pessoas);
// fireTableDataChanged abaixo é um metodo herdado
// do AbstractTableModel que avisa a tabela que os
// dados foram alterados.
fireTableDataChanged();
}
public int getRowCount() {
return pessoas.size();
}
public int getColumnCount() {
return 3;
}
public Object getValueAt(int rowIndex, int columnIndex) {
Pessoa p = pessoas.get(rowIndex);
switch (columnIndex) {
case 0:
return p.getNome();
case 1:
return p.getIdade();
case 2:
return p.isBrasileiro();
default:
return null;
}
}
public String getColumnName(int columnIndex) {
switch (columnIndex) {
case 0:
return "Nome";
case 1:
return "Idade";
case 2:
return "Brasileiro";
default:
return null;
}
}
public Class<?> getColumnClass(int columnIndex) {
switch (columnIndex) {
case 0:
return String.class;
case 1:
return Integer.class;
case 2:
return Boolean.class;
default:
return null;
}
}
}
Criando a Tabela
import java.util.ArrayList;
import java.util.List;
import java.awt.*;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
public class Tabela extends JFrame {
private static final long serialVersionUID = 1L;
public Tabela() {
super("Gerenciando Tabelas no Java");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
List<Pessoa> pessoas = new ArrayList<Pessoa>();
pessoas.add(new Pessoa("Carlos", 25, true));
pessoas.add(new Pessoa("Juliana", 18, true));
pessoas.add(new Pessoa("John", 40, false));
// Modelo lógico
PessoaTableModel ptm = new PessoaTableModel();
ptm.setPessoas(pessoas);
// Componente Gráfico
JTable tabela = new JTable();
tabela.setModel(ptm);
// Coloca a tabela em uma caixa com barra de rolagem
add(new JScrollPane(tabela), BorderLayout.CENTER);
pack();
setVisible(true);
}
public static void main(String[] args) {
new Tabela();
}
}
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
public class Contato {
private String nome;
private int idade;
private String telefone;
private String email;
public Contato(String nome, int idade, String telefone, String email) {
setNome(nome);
setIdade(idade);
setTelefone(telefone);
setEmail(email);
}
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 String getTelefone() {
return this.telefone;
}
public void setTelefone(String telefone) {
this.telefone = telefone;
}
public String getEmail() {
return this.email;
}
public void setEmail(String email) {
this.email = email;
}
}
Classe ContatoTableModel
import java.util.ArrayList;
import java.util.List;
import javax.swing.table.AbstractTableModel;
public class ContatoTableModel extends AbstractTableModel {
private static final long serialVersionUID = 1L;
private List<Contato> contatos = new ArrayList<Contato>();
public void setContatos(List<Contato> contatos) {
this.contatos.clear();
this.contatos.addAll(contatos);
fireTableDataChanged();
}
public int getRowCount() {
return contatos.size();
}
public int getColumnCount() {
return 4;
}
public Object getValueAt(int rowIndex, int columnIndex) {
Contato c = contatos.get(rowIndex);
switch (columnIndex) {
case 0:
return c.getNome();
case 1:
return c.getIdade();
case 2:
return c.getTelefone();
case 3:
return c.getEmail();
default:
return null;
}
}
public String getColumnName(int columnIndex) {
switch (columnIndex) {
case 0:
return "Nome";
case 1:
return "Idade";
case 2:
return "Telefone";
case 3:
return "E-mail";
default:
return null;
}
}
public Class<?> getColumnClass(int columnIndex) {
switch (columnIndex) {
case 0:
return String.class;
case 1:
return Integer.class;
case 2:
return String.class;
case 3:
return String.class;
default:
return null;
}
}
}
Classe Agenda
import java.util.ArrayList;
import java.util.List;
import java.awt.*;
import javax.swing.*;
public class Agenda extends JFrame {
private static final long serialVersionUID = 1L;
public Agenda() {
super("Agenda Telefônica");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
JPanel entradas = new JPanel();
entradas.setLayout(new GridLayout(0,2));
entradas.add(new JLabel("Nome:"));
final JTextField nome = new JTextField(20);
entradas.add(nome);
entradas.add(new JLabel("Idade:"));
final JTextField idade = new JTextField(20);
entradas.add(idade);
entradas.add(new JLabel("Telefone:"));
final JTextField telefone = new JTextField(20);
entradas.add(telefone);
entradas.add(new JLabel("E-mail:"));
final JTextField email = new JTextField(20);
entradas.add(email);
final JButton btGravar = new JButton("Gravar");
entradas.add(btGravar);
final JButton btClear = new JButton("Limpara Campos");
entradas.add(btClear);
add(entradas, BorderLayout.NORTH);
List<Contato> contatos = new ArrayList<Contato>();
contatos.add(new Contato("Carlos", 25, "1234", "carlos@gmail.com"));
contatos.add(new Contato("Juliana", 18, "3423423", "juliana@hotmail.com"));
contatos.add(new Contato("John", 40, "3423234", "john@watson.com"));
ContatoTableModel ptm = new ContatoTableModel();
ptm.setContatos(contatos);
JTable tabela = new JTable();
tabela.setModel(ptm);
add(new JScrollPane(tabela), BorderLayout.CENTER);
pack();
setVisible(true);
}
public static void main(String[] args) {
new Agenda();
}
}