Olá, hoje vou dar início a uma série de postagens rápidas. Normalmente quando abordo um assunto, sempre procuro introduzir os conceitos e explicar detalhadamente cada passo para realizar o procedimento. Mas como não estou tendo tempo pra fazer estas postagens mais elaboradas, resolvi mudar o estilo e tornar esse blog em algo parecido com um depósito de códigos. Assim mantenho o blog ativo e mantenho uma biblioteca com meus códigos pra quem quiser copiar (as vezes eu mesmo preciso de um código que fiz e não acho).
Então vamos ao que interessa.
Quando temos uma célula editável numa JTable e clicamos na mesma para fazer a edição, normalmente temos que selecionar e apagar o valor presente na célula para entrar com outro. Para melhorar isto e já selecionar todo conteúdo da célula quando ela entrar em edição, sobrescrevemos o método changeSelection da JTable conforme abaixo:
tbExemplo = new javax.swing.JTable() { // Selecionar o conteúdo da célula quando editar public void changeSelection(int row, int column, boolean toggle, boolean extend) { super.changeSelection(row, column, toggle, extend); if (editCellAt(row, column)) { Component editor = getEditorComponent(); editor.requestFocusInWindow(); if (editor instanceof JTextComponent){ ((JTextComponent) editor).selectAll(); } } } };
P.S.: Todos códigos foram testados por mim e são funcionais. Qualquer dúvida pergunte nos comentários.
Marcio, este codigo funciona com DefautTableModel ou AbstractTableModel? Pois não estou conseguindo selecionar a celula. teria um pequeno exemplo, pois realmente fuçando no google não achei nada parecido. Desde já agradeço. Ricardo
ResponderExcluirOlá Ricardo! O código funciona com DefaultTableModel. Veja no link abaixo um pequeno exemplo:
Excluirhttp://pastebin.com/zKwrFzbJ
Se você quiser me enviar seu código, posso dar uma olhada.
Marcio, Obrigado, Muito Obrigado mesmo. Sou Iniciante, não sou programador, faço porque gosto e quero aprender. Java é complicado mas quando da certo é muito gratificante. Fazem 3 anos que estou tentando desenvolver um sisteminha. Talvez nunca consiga, mas não custa nada tentar. O que é chato são os detalhezinhos que parecem ser simples mas no fundo dão uma tremenda dor de cabeça. Desde já agradeço a sua ajuda. Ricardo
ExcluirMárcio,
ResponderExcluirToda vez que o usuário percorre a as linhas da tabela a célula é aberta para edição, como contornar isso, para que seja aberta somente com autorização.
Ex: A tecla F2
Filipe,
ExcluirSegue o link com um exemplo de edição quando pressiona F12:
http://pastebin.com/vtVfvVWA
Ps.: Não repare muito, fiz rapidinho aqui no NetBeans...
Deixe tentar esclarecer minha dúvida.
ExcluirO método changeSelection acontece antes de uma tecla ser pressionada.
Como fazer com que o editor da célula selecionada seja aberto e o texto selecionado somente ao pressionar uma determinada tecla e quando der um duplo clique com o mouse.
Um clique não é permitido abrir nem selecionar a célula.
O método changeSelection acontece (como o próprio nome diz) quando muda a seleção. O segundo exemplo que te dei abre a célula para edição quando pressionar F12 e daí pra abrir com clique duplo é fácil.
ExcluirEsse não selecionar com um clique que não faz muito sentido. Imagine que você tem centenas de células, então teria que navegar por todas somente com o teclado?
Cara muito bom! me ajudou bastante parabéns pela iniciativa.
ResponderExcluirObrigado pelo comentário!
Excluir