getRowCount() só retorna 0

Não sei oque há de errado, algúem poderia ajudar (estou usando Swing)?

 public int retornaQuantidadeLinhas() {
	return tabela.getModel().getRowCount();
}

Isso é banco? Swing? FX? Contextualize melhor. Sua pergunta tá sem pé nem cabeça.

Swing, caro.

Posta o código do seu TableModel.

public class TabelaImoveis extends JTable {
/**
*
*/
private static final long serialVersionUID = 8679019858685912438L;
private DefaultTableModel modelo;
private JScrollPane contener;
private JTable tabela;

public void gerarTabela(JFrame janela,String nome) {
	
	modelo = new DefaultTableModel();
    tabela = new JTable(modelo);
    
    modelo.addColumn("Id");
    modelo.addColumn("Tipo");
    modelo.addColumn("Descrição");
    modelo.addColumn("Frente");
    modelo.addColumn("Fundo");
    modelo.addColumn("Área²");
    modelo.addColumn("Endereço");
	modelo.addColumn("Preço");
	modelo.addColumn("Status");
	
	contener = new JScrollPane(tabela);
	tabela.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 
	
	if (nome.equals("estoque")) {
		
		contener.setBounds(10, 150, 973, 300);
		
		IIteratorImovel iterator = new IteratorImovelDTO(ImovelControl.listaImovelDTO().getArrayDTO());
		
		while(iterator.hasNext()) {
			
			ImovelDTO imovel = (ImovelDTO) iterator.next();
			
			TipoImovelDTO tipo = new TipoImovelDTO();
			
			tipo = TipoControl.pesquisarInt(imovel.getTipo().getId());
			
			if(!imovel.getStatus().equals("Vendido")) {
				Object[] linha = {imovel.getId(), 
								tipo.getNome(),
								imovel.getEstado(),
								imovel.getFrente(),
								imovel.getFundo(),
								imovel.getAreaQuadrada(),
								imovel.getEnderco(),
								imovel.getPreco(), 
								imovel.getStatus()};
				modelo.addRow(linha);
			}
			
		}

	}
	else if(nome.equals("contabilidade")) {
		contener.setBounds(350, 150,935,350);
	}
	
	else {
		contener.setBounds(10, 150, 973, 300);
		
		IIteratorImovel iterator = new IteratorImovelDTO(ImovelControl.listaImovelDTO().getArrayDTO());
		
		while(iterator.hasNext()) {
			
			ImovelDTO imovel = (ImovelDTO) iterator.next();
			
			TipoImovelDTO tipo = new TipoImovelDTO();
			
			tipo = TipoControl.pesquisarInt(imovel.getTipo().getId());
			
			if(imovel.getStatus().equals("Vendido")) {
				Object[] linha = {imovel.getId(), 
								tipo.getNome(),
								imovel.getEstado(),
								imovel.getFrente(),
								imovel.getFundo(),
								imovel.getAreaQuadrada(),
								imovel.getEnderco(),
								imovel.getPreco(), 
								imovel.getStatus()};
				modelo.addRow(linha);
			}
		}
	}
	
	tabela.getColumnModel().getColumn(0).setPreferredWidth(35);
	tabela.getColumnModel().getColumn(1).setPreferredWidth(100);
	tabela.getColumnModel().getColumn(2).setPreferredWidth(200);
	tabela.getColumnModel().getColumn(3).setPreferredWidth(80);
	tabela.getColumnModel().getColumn(4).setPreferredWidth(80);
	tabela.getColumnModel().getColumn(5).setPreferredWidth(80);
	tabela.getColumnModel().getColumn(6).setPreferredWidth(232);
	tabela.getColumnModel().getColumn(7).setPreferredWidth(80);
	tabela.getColumnModel().getColumn(8).setPreferredWidth(80);	
	
	janela.add(contener);
	tabela.repaint();
}

Você está usando DefaultTableModel. Não só eu, mas muita gente aqui vai te recomendar criar o seu próprio TableModel. Vai facilitar demais sua vida.

Em algum post o Vini Godoy citou como motivos para não usar DefaultTableModel os seguintes:

  • É mais difícil que escrever seu próprio TableModel;
  • É mais lento (usa classes sincronizadas);
  • Ocupa mais espaço em memória (duplica seus dados);
  • Deixa o código mais confuso e difícil de manter;
  • Usa casts inseguros;
  • Força que você tenha que exibir informações desnecessárias (como o ID) na tabela, ou controlar o ID numa lista separada;
  • Faz a sua mulher te deixar, o leite da sua geladeira azedar, e pessoas apontarem o dedo para você na rua;
  • Faz os teus filhos negarem que te conhecem na frente dos outros.

Depois que você aprende a usar o AbstractTableModel, nunca mais você vai querer usar o DefaultTableModel :hugs:

Quando postar código no fórum, formate ele utilizando o botão de texto pré formatado, identificado pelo botão </>

Tem algo muito estranho no seu código, veja só:

public class TabelaImoveis extends JTable { // sua classe é um JTable

    private JTable tabela;                  // mas encapsula outro JTable?

Você criou uma classe TabelaImoveis que é um JTable mas essa classe cria outro objeto do tipo JTable?

Posta o código onde você instancia e usa o objeto da classe TabelaImoveis.

Quando for citar respostas, tente pegar da fonte original. Você pode citar a resposta de um tópico em outro linkando ele, afinal, se a resposta serviu, muito provavelmente o post é relacionado ao assunto e isso pode agregar conhecimento para resolver a dúvida. Só um conselho, é claro.

[]'s

1 curtida

O post que achei isso, o Vini tava na verdade sendo irônico kkk claro que os primeiros motivos sáo verdadeiros, mas os últimos foi só brincadeira dele mesmo. Mas sempre linko quando a resposta está em outros tópicos. :hugs:

Eu sei, eu observo, hehe.

Digo isso para podermos centralizar mais conhecimento sobre um tema. Inserir links ajuda a todos que vem procurando respostas (:

1 curtida

Em outra classe eu mostro a tabela criada:

public void tabela(JFrame janela) {
    		tabela = new TabelaImoveis();
    		tabela.gerarTabela(janela,"estoque");
    		tabela.repaint();
    		janela.add(tabela);
    }

Aqui você tem um objeto do tipo TabelaImoveis

Mas dentro do método gerarTabela você está criando outra JTable.

Não tem que criar outra JTable, tem que popular o TableModel da TabelaImoveis.