Trabalhar usando foco em celulas JTable [PARCIALMENTE RESOLVIDO]

13 respostas
guisantogui

Galera to precisando trabalhar com foco em linhas de um JTable:

1- é possivel?

2- herda ou tem relação com os metodos do JTextField?

3- tutoriais, links ou material relacionado?

vlw! :wink:

Algum moderador por favor mova o topico para o avançado, já que aqui não estou obtendo muitas respostas?
obrigado!

13 Respostas

K

Tinha visto esse problema em um outro tópico aki…
da uma olhada…
pode ser que ajude

http://www.guj.com.br/posts/list/75071.java

abraços!!

guisantogui

vlw, se alguem tiver mais alguma idéia?

ViniGodoy

Movi o tópico para a área de interface gráfica, que é geralmente o local certo para perguntas envolvendo o Swing.

O que você está chamando de foco? Seria a seleção? Se for, dê uma olhada no método getSelecionModel().

guisantogui

Assim vini eu queria sempre q clicar em um campo que já tivesse algo escrito eu enviaria o comando de alteração no banco de dados se estivesse em branco eu enviaria o comando de inserção no BD, e caso todas as linhas estivessem preenchidas criar automaticamente uma nova linha em branco no fin da Jtable!

ViniGodoy

Sei, estilo o que o access faz. Isso não tem muito a ver com o foco, e sim com controlar bem o seu TableModel. A única coisa que poderia ser difícil seria se você quisesse saltar automaticamente de um editor para outro.

guisantogui

Não entendi muito bem vini, como assim saltar de um editor para outro?

pode me dar mais informações!?

ViniGodoy

Se vc quiser fazer igualzinho ao access. Que a última linha fica em edição. No caso do access, vc passa automaticamente para a próxima coluna da tabela, através da tecla tab. Se pressionar ESC, cancela a adição da linha. E se pressionar enter no último campo (ou a seta para cima) confirma a edição. O JTable não foi programado para ter esse comportamento, e, tentar emula-lo pode dar muito trabalho.

guisantogui

Você me recomenda algum tipo de sistematização da minha JTable parecido, ou diferente, sei lá. Pelo menos que tenha uma boa funcionalidade e não seja dificil para uso. Eu tinha em mente algo como o acess, mas se vc disse que precisa desse trabalho todo, não que eu naum queira qbrar a cuca, mas estou meio com pressa e meus conhecimentos não são tão vastos assim no JAVA!

Se puder me dar uma luz do que posso fazer fico agradecido! :smiley:

ViniGodoy

O mais fácil mesmo é ter os campos ao lado do JTable.
O sujeito preenche os campos lá, clica em inserir, e uma linha nova é adicionada ao fim da tabela.

Outra opção é o botão inserir já colocar uma linha com dados padrão pré-preenchidos e cadastrados. E ele usar os editores só para alterar os valores. Se não alterar, vai ficar aquele cadastro estranho lá.

Eu usava das duas no meu sistema.

guisantogui

ViniGodoy:
O mais fácil mesmo é ter os campos ao lado do JTable.
O sujeito preenche os campos lá, clica em inserir, e uma linha nova é adicionada ao fim da tabela.

Outra opção é o botão inserir já colocar uma linha com dados padrão pré-preenchidos e cadastrados. E ele usar os editores só para alterar os valores. Se não alterar, vai ficar aquele cadastro estranho lá.

Eu usava das duas no meu sistema.

Pois é eu tinha feito isso aqui, mas o pessoal achou melhor eu ir direto no JTable e tal, antes eu tinha tentado direto no JTable varrendo as linhas da tabela com um for, mas não tive muito sucesso!
Mais alguma sugestão?

guisantogui

Gente olha no que eu pensei:

para ver qual linha esta selecionada:

dou um eventClick qdo clicar na JTable -> nesse evento eu percorro a linha e vejo qual linha ta selecionada -> if(linha == null) > Add no BD e AddLinha nova em branco no fim da tabela | else -> Altero o dado no banco!

O que acham, é uma saida boa, certo?
vlw pela ajuda galera!

guisantogui

Não funcionou a idéia, se tiverem mais alguma sugestão para mim conseguir fazer isso, eu aceito!

vlw galera!

guisantogui

hey pessoal achei esse codigo em outro post (abaixo) será que ele resolveria meu problema, to tetando implementa-lo agora, mas se souberem alguma coisa, toda informação é bem vinda!

public class MyTableCellEditor extends AbstractCellEditor implements TableCellEditor   
{   
    // Essa Classe interna serve para Dizer quando a celula foi alterada e o seu respectivo valor   
       JComponent component = new JTextField();   
         
       public MyTableCellEditor()   
       {   
        component.addFocusListener(   
                new FocusListener()   
                {   
                    public void focusGained(FocusEvent e) {   
                        // TODO Auto-generated method stub   
                           
                    }   
                    public void focusLost(FocusEvent e) {   
                        // TODO Auto-generated method stub   
                        CadastroLivroBolsoPeriodicoView.this.minhaJTable.getModel().   
                            setValueAt(((JTextField)component).getText(),   
                            CadastroLivroBolsoPeriodicoView.this.minhaJTable.getSelectedRow(),   
                            CadastroLivroBolsoPeriodicoView.this.minhaJTable.getSelectedColumn());   
                    }   
                }   
        );   
  
       }   
       
       public Component getTableCellEditorComponent(JTable table, Object value,   
               boolean isSelected, int rowIndex, int vColIndex)   
       {   
        // 'value'é o valor contido na celula que esta na localizacao ((rowIndex, vColIndex)   
           
           if (isSelected) {   
               
           }   
     
            
           ((JTextField)component).setText((String)value);   
     
           
           return component;   
       }   
     
    
       public Object getCellEditorValue() {   
           return ((JTextField)component).getText();   
       }   
   }
Criado 7 de maio de 2010
Ultima resposta 12 de mai. de 2010
Respostas 13
Participantes 3