Incluir Dados em JTable

Boa tarde galera,

Estou com um problema que pra muitos de vocês será até fácil pra me ajudar a resolver.

É o seguinte: Tenho uma agenda, que cadastra Nome, Idade e o Telefone do contato. Esses dados são gravados em um ArrayList.
Meu programa também faz busca de contatos por nome, lista todos os contatos da agenda e remove contatos, buscando por nome.

O que eu queria é que, quando eu desse um clique em Listar Contatos, Buscar Contatos ou Remover Contatos, os contatos da agenda aparecessem dentro do meu JTable.
Eu estou apanhando pra conseguir fazer isso, e nada! Até agora eu só consegui criar o JTable, mas não consegui em mais nada. Informações e exemplos disso na internet está em falta.

Será que alguém consegue me ajudar?
Vou postar aqui a classe PanelTable e a Tratadora de Eventos que eu tenho. Acho que é com elas que eu vou fazer isso.

PanelTable

[code]import java.awt.Dimension;
import java.awt.FlowLayout;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;

public class PanelTable extends JPanel {
private JTable table;
private JButton exit;
private JPanel panel1;
private TratadorAgenda listener;
private JScrollPane scroll;
//private String[] columns = {“Name”, “Age”, “Phone”};

public PanelTable(){
	table = new JTable(10,3);
	exit = new JButton("Exit System");
	panel1 = new JPanel(new FlowLayout(FlowLayout.CENTER,0,10));	
	listener = new TratadorAgenda(exit, this);

	scroll = new JScrollPane(table);
	scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
	scroll.setPreferredSize(new Dimension(480,200));
	
	exit.addActionListener(listener);
	
	panel1.add(exit);
	add(scroll);
	add(panel1);	
	setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
}

}[/code]

TratadorAgenda

[code]import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JOptionPane;

public class TratadorAgenda implements ActionListener {
private JButton add, search, list, remove, exit;
private Agenda agenda = new Agenda();
private Contact contact;
private PanelCad set;

// private PanelTable tab;

public	TratadorAgenda(JButton add, JButton search, JButton list,
		JButton remove, PanelCad set) {
	this.add = add;
	this.search = search;
	this.list = list;
	this.remove = remove;
	this.set = set;
}

public TratadorAgenda(JButton exit, PanelTable tab) {
	this.exit = exit;
	// this.tab = tab;
}

public void addContact() {
	contact = new Contact();

	contact.setName(set.getNome());
	contact.setAge(set.getAge());
	contact.setPhone(set.getPhone());

	try {
		agenda.addContact(contact);
	} catch (IOException e) {
		e.printStackTrace();
	}
	set.setStatus("Contact successfully added!");
}

public void searchContact() {
	String nome = set.getNome();
	Contact c = agenda.searchContact(nome);

	if (c != null) {
		System.out.println("Name: " + c.getName());
		System.out.println("Age: " + c.getAge());
		System.out.println("Phone: " + c.getPhone());
	} else {
		set.setStatus("Contact not found!");
	}
}

public void listContact() {
	List<Contact> contact = agenda.getContacts();
	
	if (agenda.quantity() == 0){
		set.setStatus("Your agenda is empty! Add contacts!");
	}
	for (Contact a : contact) {
		System.out.println("Name: " + a.getName());
		System.out.println("Age: " + a.getAge());
		System.out.println("Phone: " + a.getPhone());
	}
}

public void removeContact() {
	String name = set.getNome();
	if (agenda.exists(name) == true) {
		Contact c = agenda.searchContact(name);

		int choice = JOptionPane.showConfirmDialog(null,
				"Remove contact from agenda?", "Removing",
				JOptionPane.YES_NO_OPTION);

		if (choice == JOptionPane.YES_OPTION) {
			agenda.removeContact(name);
			set.setStatus("Contact successfully removed!");

			if (c != null) {
				System.out.println("Name: " + c.getName());
				System.out.println("Age: " + c.getAge());
				System.out.println("Phone: " + c.getPhone());
			}
			if (choice == JOptionPane.NO_OPTION) {
				set.setStatus("Action Cancelled!");
			} else {
			}
		} else {
			set.setStatus("Contact not found!");
		}
	}
}

public void actionPerformed(ActionEvent e) {
	if (e.getSource() == add) {
		addContact();
	}
	if (e.getSource() == search) {
		searchContact();
	}
	if (e.getSource() == list) {
		listContact();
	}
	if (e.getSource() == remove) {
		removeContact();
	}
	if (e.getSource() == exit) {
		System.exit(0);
	}
}

}[/code]

Espero que não seja dificil… Obrigado!

Estude DefaultTableModel, veja como tudo acontece e após aprenda a criar o seu próprio model.

Nos links da minha assinatura, há referências para várias explicações sobre como criar um TableModel. Você poderá usar o seu ArrayList diretamente e ele será exibido no JTable. Dê uma olhada.

E em hipótese alguma utilize o DefaultTableModel.

Concordo com o ViniGodoy!!

“E em hipótese alguma utilize o DefaultTableModel.”

Falei nele a título de conhecimento, é tanto que no no final indico que vc crie seu próprio model.

Valeu ViniGodoy!!
:smiley:

Boa tarde pessoa,

Bom, eu fiz o que vocês me sugeriram. Com base em um TableModel postado aqui, eu criei o meu próprio. Fiz um teste com dados inseridos por mim mesmo e funcionou.
O problema agora é eu conseguir pegar os dados que já existem em algum lugar e passar pra ele. Não sei muito bem como fazer isso.

A Tabela aparece no meu frame do jeito que eu quero. Porém, quando eu clico no botão Procurar, por exemplo, os dados não vão para a tabela.
Estou com uma dúvida muito grande por causa disso.

Eu tenho uma classe que se chama Agenda. Nessa classe tem todos os métodos que constituem a agenda, por exemplo, addContact, removeContact, searchContact.
Na minha classe MyTableModel, também tem esses métodos. Ai que eu fiquei na dúvida. Na tabela, eu não quero incluir nada, só quero que quando eu clique em Procurar, ele pegue os dados que estão na agenda, e mostre na Table, quando eu clique em Listar, pegue todos os contatos e mostre lá também.

Segue ai meu código:

Class Agenda

[code]import java.io.IOException;
import java.util.ArrayList;

public class Agenda {
ArrayList contacts = new ArrayList();

public boolean addContact(Contact c) throws IOException {
	return contacts.add(c);
}

public boolean removeContact(String nome) {
	Contact contactRemove = new Contact();
	contactRemove.setName(nome);
	return contacts.remove(contactRemove);
}

public Contact searchContact(String nome) {
	for (Contact c : contacts) {
		if (c.getName().equalsIgnoreCase(nome))
		{
			return c;
		}
	}
	return null;
}

public int quantity() {
	return this.contacts.size();
}

public boolean exists(String nome) {
	Contact verify = new Contact();
	verify.setName(nome);
	return contacts.contains(verify);
}

public ArrayList<Contact> getContacts() {
	return this.contacts;
}

}[/code]

Class MyTableModel

[code]import java.util.ArrayList;
import java.util.List;
import javax.swing.table.AbstractTableModel;

public class MyTableModel extends AbstractTableModel {
private List lines;
private String[] columns = new String[] {
“Name”, “Age”, “Phone”};

public MyTableModel() {
	lines = new ArrayList<Contact>();
}

public MyTableModel(List<Contact> contactList) {
	lines = new ArrayList<Contact>(contactList);
}

public int getColumnCount() {
	return columns.length;
}

public int getRowCount() {
	return lines.size();
}

public String getColumnName(int columnIndex) {
	return columns[columnIndex];
};

public Class<?> getColumnClass(int columnIndex) {
	switch (columnIndex) {
		case 0: // Primeira coluna é o nome.
			return String.class;
		case 1: // Segunda coluna é a idade.
			return String.class;
		case 2: // Terceira coluna é o telefone,
			return String.class;
		default:
			throw new IndexOutOfBoundsException("columnIndex out of bounds");
	}
}

public Object getValueAt(int rowIndex, int columnIndex) {
	Contact contact = lines.get(rowIndex);

	switch (columnIndex) {
		case 0: // Primeira coluna é o nome.
			return contact.getName();
		case 1: // Segunda coluna é a idade.
			return contact.getAge();
		case 2: // Terceira coluna é o telefone.
			return contact.getPhone();
		default:
			throw new IndexOutOfBoundsException("columnIndex out of bounds");
	}
}

public void setValueAt(Object aValue, int rowIndex, int columnIndex) {};

public boolean isCellEditable(int rowIndex, int columnIndex) {
	return false;
}

public Contact getContact(int lineIndex) {
	return lines.get(lineIndex);
}

public boolean addContact(Contact contact) {
	return lines.add(contact);
}

public void removeContact(int lineIndex) {
	lines.remove(lineIndex);
	fireTableRowsDeleted(lineIndex, lineIndex);
}

public void addContactList(List<Contact> contact) {
	int lastSize = getRowCount();
	lines.addAll(contact);
	fireTableRowsInserted(lastSize, getRowCount() - 1);
}

public void clean() {
	lines.clear();
	fireTableDataChanged();
}

public boolean isEmpty() {
	return lines.isEmpty();
}

}[/code]

Class PanelTable

[code]import java.awt.Dimension;
import java.awt.FlowLayout;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;

public class PanelTable extends JPanel {
private JTable table;
private JButton exit;
private JPanel panel1;
private TratadorAgenda listener;
private JScrollPane scroll;

public PanelTable(){
	table = new JTable();
	table.setModel(new MyTableModel());
	exit = new JButton("Exit System");
	panel1 = new JPanel(new FlowLayout(FlowLayout.CENTER,0,10));	
	listener = new TratadorAgenda(exit);

	scroll = new JScrollPane(table);
	scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
	scroll.setPreferredSize(new Dimension(480,200));
	
	exit.addActionListener(listener);
	
	panel1.add(exit);
	add(scroll);
	add(panel1);	
	setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
}

}[/code]

Class TratadorAgenda

[code]import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JOptionPane;

public class TratadorAgenda implements ActionListener {
private JButton add, search, list, remove, exit;
private Agenda agenda = new Agenda();
private Contact contact;
private PanelCad set;

public	TratadorAgenda(JButton add, JButton search, JButton list,
		JButton remove, PanelCad set) {
	this.add = add;
	this.search = search;
	this.list = list;
	this.remove = remove;
	this.set = set;
}

public TratadorAgenda(JButton exit) {
	this.exit = exit;
}

public void addContact() {
	contact = new Contact();

	contact.setName(set.getNome());
	contact.setAge(set.getAge());       // AQUI EU CADASTRO OS DADOS DIGITADOS NA AGENDA
	contact.setPhone(set.getPhone());

	try {
		agenda.addContact(contact);
	} catch (IOException e) {
		e.printStackTrace();
	}
	set.setStatus("Contact successfully added!");
}

public void searchContact() {
	String nome = set.getNome();
	Contact c = agenda.searchContact(nome);
	
	if (c != null) {
		System.out.println("Name: " + c.getName());
		System.out.println("Age: " + c.getAge());        // AQUI EU QUERIA PEGAR OS DADOS CADASTRADOS E MOSTRAR NA TABLE
		System.out.println("Phone: " + c.getPhone());
	} else {
		set.setStatus("Contact not found!");
	}
}

public void listContact() {
	List<Contact> contact = agenda.getContacts();
	
	if (agenda.quantity() == 0){
		set.setStatus("Thes agenda is empty! Add contacts!");
	}
	for (Contact c : contact) {
		System.out.println("Name: " + c.getName());
		System.out.println("Age: " + c.getAge());    // AQUI TAMBÉM QUERO PEGAR OS DADOS CADASTRADOS E MOSTRAR NA TABLE
		System.out.println("Phone: " + c.getPhone());
	}
}

public void removeContact() {
	String name = set.getNome();
	if (agenda.exists(name) == true) {
		Contact c = agenda.searchContact(name);

		int choice = JOptionPane.showConfirmDialog(null,
				"Remove contact from agenda?", "Removing",
				JOptionPane.YES_NO_OPTION);

		if (choice == JOptionPane.YES_OPTION) {
			agenda.removeContact(name);
			set.setStatus("Contact successfully removed!");

			if (c != null) {
				System.out.println("Name: " + c.getName());
				System.out.println("Age: " + c.getAge());        // AQUI EU SÓ QUERIA MOSTRAR EM TABELA, MAS EU VOU MUDAR PARA UM JOptionPane 
				System.out.println("Phone: " + c.getPhone()); // O CONTATO REMOVIDO.
			}
			if (choice == JOptionPane.NO_OPTION) {
				set.setStatus("Action Cancelled!");
			} else {
			}
		} else {
			set.setStatus("Contact not found!");
		}
	}
}

public void actionPerformed(ActionEvent e) {
	if (e.getSource() == add) {
		addContact();
	}
	if (e.getSource() == search) {
		searchContact();
	}
	if (e.getSource() == list) {
		listContact();
	}
	if (e.getSource() == remove) {
		removeContact();
	}
	if (e.getSource() == exit) {
		System.exit(0);
	}
}

}[/code]

É isso ai pessoal. Espero que consigam me ajudar.

Ninguém? =S