Oi turma!!
Alguém pode me dizer como eu faço pra impedir que uma determinada tecla (quando o usuário pressionar) apareça no TextField???
Patricia.
Oi turma!!
Alguém pode me dizer como eu faço pra impedir que uma determinada tecla (quando o usuário pressionar) apareça no TextField???
Patricia.
Bom menina…
Esses tempos precisei usar algo parecido e criei um método que a cada vez que ocorria um evento devido a digitação de um novo caracter o método fazia uma verificação pra verificar se ele era permitido ou não, se não fosse o caracter era deletado da String. Funciona, mas acho que deve existir alguma outra forma melhor pra fazer isso, não sei se a classe JTextField oferece um método com esse recurso…
Gustavo Guilherme BacK
Essas classes elas te permitem entrar apenas valores do tipo inteiro num JTextField, é só vc adaptar a suas necessidades
class IntTextDocument extends PlainDocument
{ public void insertString(int offs, String str,
AttributeSet a)
throws BadLocationException
{
if (str == null) return;
String oldString = getText(0, getLength());
String newString = oldString.substring(0, offs)
+ str + oldString.substring(offs);
try
{
Int.parseInt(newString + "0");
super.insertString(offs, str, a);
}
catch(NumberFormatException e)
{
}
}
}
class IntTextField extends JTextField
{ public IntTextField(int defval, int size)
{
super("" + defval, size);
}
protected Document createDefaultModel()
{
return new IntTextDocument();
}
public boolean isValid()
{
try
{
Int.parseInt(getText());
return true;
}
catch(NumberFormatException e)
{
return false;
}
}
public double getValue()
{
try
{
return Int.parseInt(getText());
}
catch(NumberFormatException e)
{
return 0;
}
}
}
Bem, acho que não entendeu…
O que eu queria era desabilitar uma tecla, especificamente a tecla ’
Bem como eu poderia pelo menos deletar um caracter especifico do meu JTextField ???, no caso o ’
Se alguém puder me ajudar, ficaria agradecida.
PS: luiz_ross, desculpe, mas não é pra converter para inteiro, o que eu preciso, é desabilitar a tecla ’
A unica diferença dessa classe é que ela impede qualquer tipo de caracter, você só consegue entrar com inteiros mais nada. É mais ou menos nessa linha que você deve seguir.
De qualquer jeito você vai ter que extender a classe PlainDocument e criar um novo modelo de dados que seja capaz de restringir o número de e quais caracteres devem ser aceitos no seu novo modelo de dados do JTextField que você quer criar
Da uma olhada no tutorial do Dango aki no guj “Controlando JTextFields” que eu acho que pode te ajudar
Fala, Pati…
Bem, para o seu problema, existem diversas soluções. A primeira, como foi dito por um companheiro aqui no GUJ, é tu dar uma olhadinha no tutorial que dá exemplo de você criar sua própria classe que extende PlainDocument.
A segunda, seria você criar um objeto ControlaTecla que implemente um java.awt.event.KeyListener. Esta interface possui três métodos que devem ser implementados:
keyPressed(KeyEvent e);
keyReleased(KeyEvent e);
keyTyped(KeyEvent e);
Os nomes são auto-explicativos, então é desnecessário eu descrever a função de cada método. O que é legal aí é que o método recebe como parâmetro, um KeyEvent. Em posse deste objeto, você pode identificar qual tecla o usuário clicou e fazer o tratamento adequado.
Bem, qualquer coisa, a gente vai se falando!
Abraços,
Júnior
eu precisei fazer algo parecido uma vez e fiz assim:
coloquei um KeyListener como esse no meu JTextField
private class MyKeyListener extends KeyAdapter{
public void keyTyped(KeyEvent e){
if (e.getKeyChar()=='X'){
e.consume();
}
}
}
O e.consume so da o efeito esperado se usado dentro do método keyTyped!
Agora se a tecla n possuir um caracter digitável, como a tecla “Backspace” fica mais fácil vc tratar a tecla pelo código dela, porem n sei pq quando vc tenta pegar o codigo da tecla com e.getKeyCode() dentro do metodo keyTyped ele sempre retorna 0, entao vc precisa colocar o metodo keyPressed para auxiliar, assim:
[code]
private class MyKeyListener extends KeyAdapter{
boolean aux= false;
public void keyPressed(KeyEvent e){
if (e.getKeyCode==8){ //Code=8 -> Backspace
aux=true;
}
}
public void keyTyped(KeyEvent e){
if (aux){
e.consume();
}
}
}[/code]
eu fiz um JTextField q so aceita numeros (e tb o backspace, lógico :D) , é esse o codigo dele:
import javax.swing.JTextField;
import java.awt.event.*;
public class NumericTextField extends JTextField{
public NumericTextField(){
this.addKeyListener(new NumericKeyListener());
}
public void paste(){
}
//Classe Interna
private class NumericKeyListener extends KeyAdapter{
boolean ok= false;
public void keyPressed(KeyEvent e){
int code= e.getKeyCode();
//aki se precionado um mumero ou o backspace
//a variavel ok recebe true
ok=( (code>95 && code<106) || //0-9 (numerico)
code==8 || //Backspace
(code>47 && code<58) ); //1-0 (alfanumerico)
}
public void keyTyped(KeyEvent e){
//aki se a tecla apertada n for as acima ele ignora
if (!ok){
e.consume();
}
}
}
}
o metodo
public void paste(){
}
ta sobreescrito ai sem função alguma so para evitar que alguem cole algo q nao seja um numero!
qqr coisa Grita