Boa tarde amigos…
Estou tento uma certa dificuldade ao confeccionar minha JTable…
Pois bem, já li inumeros posts nesse forum aqui e parece que nenhum resolveu meu problema…
Estou tentado criar minha JTable, mas os danados dos titulos não aparece… alguem pode me ajudar?
public Container showFormularioConsultarReservas(){
Container container = frame.getContentPane();
controlador = new Controlador();
container.setVisible(false);
container.removeAll();
container.setLayout(null);
JLabel nome = new JLabel("Nome:");
JLabel dataEntrada = new JLabel("Data Entrada:");
JLabel dataSaida = new JLabel("Data Saída:");
inputNome = new JTextField();
//Configuraçao da tabela
//MyTableModel tableModel = new MyTableModel();
DefaultTableModel dftm = new DefaultTableModel();
dftm.setColumnCount(4);
dftm.setRowCount(10);
JTable jtable = new JTable();
Vector titulo = new Vector();
titulo.add("Id Curso");
titulo.add("Nome");
titulo.add("Descrição");
titulo.add("Tipo");
dftm.setColumnIdentifiers(titulo);
jtable.setModel(dftm);
nome.setBounds(10, 10, 40, 30);
inputNome.setBounds(100, 10, 380, 30);
dataEntrada.setBounds(10, 50, 80, 30);
jfDataEntrada.setBounds(100, 50, 90, 30);
dataSaida.setBounds(310, 50, 80, 30);
jfDataSaida.setBounds(390,50,90,30);
botaoConsultar.setBounds(100, 90, 100, 30);
botaoLimpar.setBounds(390,90,90,30);
jtable.setBounds(10, 240, 570, 200);
jtable.setValueAt("Teste", 2, 2);
container.add(nome);
container.add(inputNome);
container.add(dataEntrada); container.add(jfDataEntrada);
container.add(dataSaida); container.add(jfDataSaida);
container.add(botaoConsultar); container.add(botaoLimpar);
container.add(jtable);
botaoLimpar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
limparCamposFormulario();
}
});
botaoConsultar.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0){
//consultar();
}
});
container.setVisible(true);
return container;
}
Coloque sua JTable em um JScrollPane.
Tive esse mesmo problema, mais consegui resolver. Erick, estou usando no meu projeto um modelo de tableModel que vc criou e postou no fórum e ele está funcionado, mas há uma coisa que está me incomodando e até o momento não consegui resolver. quando eu insiro um novo registro no banco de dados, esse novo registro só aparece na jtabel quendo eu realizar uma nova pesqusa, como faço para que esse novo registro seja mostrado automaticamante na jtable ?
Você deve ter criado o método que adiciona um objeto ao TableModel certo? Seria o equivalente ao “addSocio” do exemplo que postei.
Uma das formas de fazer o que você quer, seria adicionar o mesmo objeto que foi salvo no banco usando este método.
Seria passar o objeto individulamente. eu criei um método para a pesquisa que pesquisa o usuario por nome por meio de uma lista e criei uma outra lista para retornar todos os campos adionados ao banco. assim:
public List<Usuario> getListUsuario(String nome) throws SQLException{
String sql = "Select*from usuario where nome like ?";
PreparedStatement stmt = this.conexao.prepareStatement(sql);
stmt.setString(1,nome);
ResultSet rs = stmt.executeQuery();
List<Usuario> usu = new ArrayList<Usuario>();
while(rs.next()){
Usuario contatoUsuario = new Usuario();
contatoUsuario.setIdUsuario(rs.getInt("idUsuario"));
contatoUsuario.setNome(rs.getString("nome"));
contatoUsuario.setEndereco(rs.getString("endereco"));
contatoUsuario.setBairro(rs.getString("bairro"));
contatoUsuario.setCidade(rs.getString("cidade"));
contatoUsuario.setEstado(rs.getString("estado"));
contatoUsuario.setRG(rs.getString("rg"));
contatoUsuario.setCPF(rs.getString("cpf"));
contatoUsuario.setEmail(rs.getString("email"));
contatoUsuario.setTelefone(rs.getString("telefone"));
usu.add(contatoUsuario);
}
rs.close();
stmt.close();
return usu;
}
Esse método do tipo lista eu crei na classe usuarioDao, juntamente com a outra lista que está retornando todos os usuarios cadastrados.
public List<Usuario> listaContatosUsuario() throws SQLException{
PreparedStatement stm = this.conexao.prepareStatement("select*from usuario");
ResultSet res = stm.executeQuery();
List<Usuario> usua = new ArrayList<Usuario>();
while(res.next()){
Usuario contato = new Usuario();
contato.setIdUsuario(res.getInt("idUsuario"));
contato.setNome(res.getString("nome"));
contato.setEndereco(res.getString("endereco"));
contato.setBairro(res.getString("bairro"));
contato.setCidade(res.getString("cidade"));
contato.setEstado(res.getString("estado"));
contato.setRG(res.getString("rg"));
contato.setCPF(res.getString("cpf"));
contato.setEmail(res.getString("email"));
contato.setTelefone(res.getString("telefone"));
usua.add(contato);
}
res.close();
stm.close();
return usua;
}
no botão pesquisar chamo o método listar contatos
[code]
private void listarContatos() throws SQLException {
usuarioDao usu = new usuarioDao();
Listcontato = usu.getListUsuario("%"+ jTextField1.getText()+"%");
usuarioTableModel model = new usuarioTableModel(contato);
jTable1.setModel(model);
}
[/code] observe que no método listar contatos já estou repassando tudo o que pesquisado para o meu modelo de tabela e funciona perfeitamante. O mesmo processo estou fazendo no código personalizado da jTable1, só que dessa vez, passando o método listaContatosUsuario()
, que lista todos os usuários, porém não dá certo. Assim:
[code]
jTable1 = new javax.swing.JTable();
try{
usuarioDao dao = new usuarioDao();
List cont = dao.listaContatosUsuario();
tabela = new usuarioTableModel(cont);
jTable1.setModel(tabela);
}catch(SQLException e){}
[/code] não dá certo. Só mostra a tabela atualizada se eu clicar no botão pesquisar.
Veja abaixo o meu modelo de tabela que fiz baseado no seu exemplo:
[code]
ackage br.com.sgbif.view;
import br.com.sgbi.bean.Usuario;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.swing.table.AbstractTableModel;
/**
*
-
@author Marcelo Kleyton
*/
public class usuarioTableModel extends AbstractTableModel {
private static final long serialVersionUID = 1L;
private Listlinhas;
private String[]colunas = new String[]{“Codigo”,“Nome”,“Endereço”,“Telefone”};
public usuarioTableModel(){
linhas = new ArrayList();
}
public usuarioTableModel(ListlistaDeUsuario) throws SQLException{
linhas = new ArrayList(listaDeUsuario);
}
@Override
public int getRowCount() {
return linhas.size();
}
@Override
public int getColumnCount() {
return colunas.length;
}
@Override
public String getColumnName(int columnIndex){
return colunas[columnIndex];
}
@Override
public Class<?> getColumnClass(int columnIndex){
return String.class;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Usuario usuario = linhas.get(rowIndex);
switch(columnIndex){
case 0: return usuario.getIdUsuario();
case 1: return usuario.getNome();
case 2: return usuario.getEndereco();
case 3: return usuario.getTelefone();
default:
throw new IndexOutOfBoundsException("columnIndex out of bounds");
}
}
@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex){
}
@Override
public boolean isCellEditable( int rowIndex, int columnIndex){
return false;
}
public Usuario getUsuario(int indiceLinha){
return linhas.get(indiceLinha);
}
public void addUsuario(Usuario contUsuario){
linhas.add(contUsuario);
int ultimoIndice = getRowCount()-1;
fireTableRowsInserted(ultimoIndice, ultimoIndice);
}
public void removeUsuario(int indiceLinha){
linhas.remove(indiceLinha);
fireTableRowsDeleted(indiceLinha, indiceLinha);
}
public void addListaUsuarios(Listusuario){
int tamanhoAntigo = getRowCount();
linhas.addAll(usuario);
fireTableRowsInserted(tamanhoAntigo, getRowCount()-1);
}
public void limpar(){
linhas.clear();
fireTableDataChanged();
}
public boolean isEmpty(){
return linhas.isEmpty();
}
}
[/code] Veja de que forma vc pode me ajudar.
Quando você salva um usuário no banco, adicione o usuário ao model usando o método addUsuario.