estou criando minha classe abstract tablemodel do socios do meu sistema, então
quando eu faço um select no meu banco vem os dados do sócio e do entregador pela fk,
então para garregar no jtable vai tudo bem mais para mim dar um
setValueAt() como vou fazer para setar os valores do entregador.
Da mesma maneira que você faz para qualquer atributo do sócio.
Quando você vai setar um valor numa determinada coluna, você identifica qual é ela (um dos argumentos deste método é a coluna em questão) e, a partir disso, você obtém o valor do atributo a ser exibido.
Exemplo, suponhamos que a coluna nome, do sócio, é a coluna 3.
Então, você verifica qual é o atributo correspondente à coluna 3 (no caso, o nome) e o devolve.
Da mesma maneria, a questão é saber qual coluna representa cada dado do entregador.
Sacou?
Você tem 17 colunas (0 a 16). Precisará incluir mais 3 (referentes aos dados do entregador).
Me refiro aos cases, você tem case 0 até case 16. Se inserir os cases 17, 18 e 19, contemplará todos os dados do entregador .
Só um ponto de atenção. Cada socio possui apenas um entregador ou uma lista de entregadores? Pois, se for isso (lista), a coisa já fica mais complexa.
Ah, sim.
Temos uma abordagem que eu não gosto muito. Expor todos os dados em uma única jtable pode ficar poluído (sempre querem fazer do sistema uma extensão do excel),
A minha ideia seria exibir, na jtable, colunas coerentes com os dados principais. Mais detalhes, apenas se clicasse em um botão tipo “Ver mais” ou “Detalhes”. Então, abrir um jframe contendo os dados detalhados e completos.
Mas, essa é a minha opinião.
sim nesse caso so estou colocando o nome, o resto estou ocultando.
mas pego todos os dados pq en outro form vou presisar deles,
existe algum jeito de eu pegar so as colunas que me enteressa e jogar no form.
pq la no form estou coluna por coluna da 0 a 16
tbListarSocios.getColumnModel().getColumn(0).setPreferredWidth(0);
tbListarSocios.getColumnModel().getColumn(0).setMinWidth(0);
tbListarSocios.getColumnModel().getColumn(0).setMaxWidth(0);
E qual a razão desses dados não serem atributos de um objeto?
Você não deve depender do que é apresentado na interface de usuário.
Sua interface de usuário é que deve depender de objetos que fornecem os dados a serem apresentados.
Entenda uma coisa, se você é iniciante em algo, não começa pelo meio, começa pelo começo.
Quando você criar uma JTable, você precisa definir qual o modelo para ela. É aí que entre o TableModel.
Talvez não precise de N models para N quantidades, mas, quanto mais especialista a classe for, menos complexidade você tem no teu código (quantos ifs precisa para atender as variações de quantidade de colunas?)
Primeiro tens que parar de pensar em obter os valores de uma tela pra passar pra outra.
Tens que pensar que as duas telas vão manipular os mesmos objetos, neste caso, uma lista de objetos do tipo Socio.
No TableModel da primeira tela, o método getRowCount tem que retornar o tamanho da lista de socios;
O getColumCount tem que retornar 2;
O getColumnName tem que retornar “ID” para a primeira coluna e “NOME” para a segunda coluna;
O getValueAt vai obter o objeto Socio da linha informada e para a primeira coluna vai retornar o socio.getID() e para a segunda coluna vai retornar o socio.getNome();
E na outra tela você pega o mesmo objeto Socio e traz as informações adicionais que deseja utilizando outros métodos getters da classe Socio.
Então Darlan eu já li bastante sobre tableModel
E até implemente ele algumas vezes,
Mas eu ficava sentando valor zero para o Size das colunas, como mostrei antes.
E no meu tableModel eu usava o método addRow () junto com wihle.
Mas pelo jeito estava fazendo errado.
Após você é o nosso colega staroski me falarem deste jeito novo estou tentado pegar pra poder implementar no meu código.
Por isso que é extremamente importante dar uma olhada no javadoc. Ele explica (não tão claramente) como as coisas funcionam e podem auxiliar em questões como estas.