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!
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!
publicclassMyTableCellEditorextendsAbstractCellEditorimplementsTableCellEditor{// Essa Classe interna serve para Dizer quando a celula foi alterada e o seu respectivo valor JComponentcomponent=newJTextField();publicMyTableCellEditor(){component.addFocusListener(newFocusListener(){publicvoidfocusGained(FocusEvente){// TODO Auto-generated method stub }publicvoidfocusLost(FocusEvente){// TODO Auto-generated method stub CadastroLivroBolsoPeriodicoView.this.minhaJTable.getModel().setValueAt(((JTextField)component).getText(),CadastroLivroBolsoPeriodicoView.this.minhaJTable.getSelectedRow(),CadastroLivroBolsoPeriodicoView.this.minhaJTable.getSelectedColumn());}});}publicComponentgetTableCellEditorComponent(JTabletable,Objectvalue,booleanisSelected,introwIndex,intvColIndex){// 'value'é o valor contido na celula que esta na localizacao ((rowIndex, vColIndex) if(isSelected){}((JTextField)component).setText((String)value);returncomponent;}publicObjectgetCellEditorValue(){return((JTextField)component).getText();}}