Help Java Desktop

4 respostas
I

Boa noite galera, gostaria de saber como pegar o valor exato de um campo do jtable, e comparar com um campo em 1 combobox...

ex:

Tenho uma ArrayList com um objeto referente aos dados do meu projeto como: codigo, descricao, edital, codigo da instituição, codigo do laboratorio, codigo do coordenador, codigo de aluno responsável. Utizo esse ArrayList para popular um jtable até aí tudo bem segue o código

private void preencheTabela() {
        ProjetoDAO dao = new ProjetoDAO();
        listaProj = dao.getLista();
        DefaultTableModel modelo = (DefaultTableModel) table_projeto.getModel();
        modelo.setNumRows(0);

        //Adicionando os dados na Tebela
        for (ProjetoBean bean : listaProj) {
            modelo.addRow(new Object[]{bean.getCodigo(), bean.getProjetoDesc(), bean.getEdital()});
            lastId = bean.getCodigo();
        }
        //Adicionado o lasId baseado no ultimo dado recebido
        if (listaProj.size() <= 0) {
            lastId = 0;

        }
    }

Nesta mesmo tela tenho 4 combobox, um para o codigo da instituição, codigo do laboratório, codigo da usuário coordenador, código do usuário responsavel...
cada cb tem um ArrayList que recebe todos os valores de uma consulta no bd.... Beleza até aí, todas as combobox estão sendo preenchidas direitinho....

for (int i = 0; i < listProjInst.size(); i++) {
            cb_inst.addItem(listProjInst.get(i).getSigla());
        }
        for (int i = 0; i < listProjLab.size(); i++) {
            cb_lab.addItem(listProjLab.get(i).getSigla());
        }
        for (int i = 0; i < listProjUsrCoord.size(); i++) {
            cb_coord.addItem(listProjUsrCoord.get(i).getNome());
        }
        for (int i = 0; i < listProjUsrResp.size(); i++) {
            cb_alunoResp.addItem(listProjUsrResp.get(i).getNome());
        }

Então nesta tela disponibilizo uma opção para o usuário ao clicar em um dos row do jtable, que ele possa alterar esses valores, aonde quando ele selecionar um row, irá preencher todos os textfield com os valores, e setar o combobox para o valor correspondente ao row selecionado, por exemplo:

Se eu seleciono uma linha que tem o Igor como coordenador, o Yuri como responsavel, o cb_coord.setSelectedIndex(); tem que corresponder ao codigo do coordenador da row selecionado. Esta implementado da seguinte forma:

cb_coord.setSelectedIndex(listaProj.get(table_projeto.getSelectedRow()).getProjetoCord());
Só que eu ja identifiquei que: quando eu preencho o ArrayList que popula o combobox do coordenador, ele vai populando com os valores nos indices 1,2,3,4,5,6. blz.. Mas acredito que não esta certo, pois digamos que eu tenho 1 coordenador com valor 1, outro com valor 3. ao popular eles no ArraysList iria ficar nos indices 1,2 (levando em consideração que o 0 é o valor default). então quando eu faço para selecionar a 2 linha da minha jtable cujo valor do getProjetoCord = 3, ele da um erro de
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: setSelectedIndex: 2 out of bounds
ou seja até onde entendi que o indice 3 não existe.

Só que não estou conseguindo fazer essa comparação pois o valor que é passado do getProjetoCord nem sempre será igual ao indice que armazeno o coordenador com o código correspondente!

Alguem pode me ajudar?

4 Respostas

R_chieck

Ola
primeiramente não use o DefaultTableModel!!! implemente o seu usando o AbstractTableModel.

caso não quiser ou não conseguir implementar o seu pode usar a biblioteca Towel do Mark

https://github.com/MarkyVasconcelos/Towel
la tem diversas classes uteis, e inclusive uma ObjectTableModel genérica, ou seja não precisará criar uma para classe

JuniorMaia

Cara, primeiramente, crie sua tabela extendendo da abstract, mas como tu já usou a Default, use o seguinte código para pegar as informações:

[code]

table_projeto.getValueAt(table_projeto.getSelectedRow(), table_projeto.getSelectedColumn());

ViniGodoy

Tópico movido para o fórum de interface gráfica.

I

R$chieck:
Ola
primeiramente não use o DefaultTableModel!!! implemente o seu usando o AbstractTableModel.

caso não quiser ou não conseguir implementar o seu pode usar a biblioteca Towel do Mark

https://github.com/MarkyVasconcelos/Towel
la tem diversas classes uteis, e inclusive uma ObjectTableModel genérica, ou seja não precisará criar uma para classe

Nossa como o AbstractTableModel tudo fica mais claro e fácil para implementar, manutenção e etc…

Minha Dúvida é que ja tenho 8 telas do meu TCC ja feitas com Default Table Model, será que valeria a pena re-escrever meu código? para implementar a AbstractTableModel?

sendo que entrego o sistema dia 25/06 :frowning:

Criado 24 de maio de 2012
Ultima resposta 28 de mai. de 2012
Respostas 4
Participantes 4