Problemas na ediÇÃo de campo em jtable

5 respostas
C

Oi Pessoal, se alguém puder me ajudar agradeço.

Atualmente trabalho com JBuilder 8, basicamente trabalhando
com Swing.

Existem algumas telas do meu sistema que interage com o
usuário através de JTable, mais precisamente (JdbTable “classe borland”) ,
no qual o usuário digita diretamente na Tabela.

Nos campos que o usuário realiza a digitação foram criados
mascaras para controlar o que é digitado. O problema está no
momento da digitação, quando o usuário entra em modo de edição no campo
o cursor sempre se posiciona no final do campo, desta forma o usuário
tem que digitar a tecla <HOME> para se posicionar no inicio do campo e desta
forma realizar a digitação. Na verdade gera um desconforto e perda de tempo ao usuário
e não necessariamente um problema na digitação.

Verifiquei que o problema ocorre em decorrência da existencia de mascaras associadas as
colunas da tabela, colunas/campos que não tem mascara não ocorre este problema.

Tenho buscado soluções em duas hipóteses: 1)Descobrir como acionar a tecla <HOME>
via código Java, desta forma o usuário ao entrar em modo de edição no campo da tabela, o sistema
automaticamente posicionaria o cursor no inicio do campo.
2)Verificar se existe uma forma diferente de criar mascaras.

Exemplo do código atualmente utilizado;

JdbTable tabelaUser = new JdbTable()
tabelaUser .setDataSet(queryDataSet);

Column colunaUser = new Column()

queryDataSet.setColumns(new Column[] {colunaUser});

colunaUser .setAlignment(com.borland.dx.text.Alignment.CENTER |

com.borland.dx.text.Alignment.MIDDLE);

colunaUser .setBackground(Color.orange);

colunaUser .setCaption(Hr. Termino);

colunaUser .setColumnName(HR.TERMINO);

colunaUser .setDataType(com.borland.dx.dataset.Variant.STRING);

colunaUser .setDisplayMask(00:00);          <== mascaras

colunaUser .setEditMask(00:00);               <== mascaras

colunaUser .setFont(new java.awt.Font(Dialog, 1, 11));

colunaUser .setForeground(Color.red);

colunaUser .setPrecision(10);

colucolunaUser mn33.setPreferredOrdinal(4);

colunaUser .setSearchable(false);

colunaUser .setTableName(PISFEX100);

colunaUser .setWidth(8);

colunaUser .setServerColumnName(FEX1005HORATERMINO);

colunaUser .setSqlType(1);

Demais tipo de mascaras utilizadas:
####.00
########.###
##########

5 Respostas

dukejeffrie

e essa colunaUser, com tantos métodos, não tem um setCursorPosition??

[]s!

C

Infelizmente não encontrei nenhum metodo setCursorPosition

dukejeffrie

… ou equivalente!! Sei lá, não uso JBuilder.

Vc pode mexer no TableCellEditor: ele tem como te dar uma instância de Document, e nela vc pode setar o cursor para 0 (zero), que é o começo.

Acho que eu não posso te ajudar nessa, meu, exceto por outro lado: repara que sua classe tá totalmente presa ao JBuilder e ao banco!

Numa próxima versão, vc pode desemaranhar essa coisa implementando um TableModel e fazendo a conexão com o banco em outro lugar.

Boa sorte!
[]s

brlima

Claudio,
tenta usar o método .setSelectionStart(0) e .setSelectionEnd(0) do cell editor quando ele abrir pra edição. Assim vc posiciona o cursor no inicio do texto. :smiley: Esses dois métodos funcionam como dar um HOME na celula.

Concorco com o duke em implementar uma JTable usando o tableModel… Voce fica mais livre pra trabalhar.

Essa JTable ai do JBuilder trabalha direto com o banco de dados ?? Eu nunca usei o JBuilder…

C

A classe JdbTable do JBuilder implementa o acesso ao banco via
jdbc. Na pratica existe uma classe chamada queryDataSet que realiza a conexão com o Banco e depois associa-se a instancia do queryDataSet a Table.

Criado 17 de dezembro de 2003
Ultima resposta 17 de dez. de 2003
Respostas 5
Participantes 3