Article View: es.comp.lenguajes.java
Article #29341Re: Acentos
From: Sergio Martinez Gonzalez
Date: Tue, 23 Dec 1997 00:00
Date: Tue, 23 Dec 1997 00:00
131 lines
4367 bytes
4367 bytes
Llu�s Felip Hurtado i Oliver wrote:
>
> Como consigo poner acentos en un TextField ?.
>
> Gracias!!!!
Loc componentes de texto del AWT tienen algunas deficiencias que pueden
hacer crispar los nervios, como la ignorancia absoluta del CAPS LOCK y
de los acentos....
Estuve investigando el tema llegando hasta los fuentes del JDK y en un
arrebato de desesperaci�n acab� especializando de TextField una clase
para salir del paso hasta que en futuras versiones del JDK subsanen este
problemilla :)
Talvez alguien te muestre una soluci�n m�s limpia y elegante, pero de
momento espero que esto te sirva: una clase derivada de TextField que
captura las pulsaciones del teclado, detecta las pulsaciones de las
teclas de acentos y transforma las vocales mediante una tabla de
conversi�n. Se utiliza �dem que un TextField...
S�, ya lo s�, muchos pensar�n que es una cutrada, pero hay momentos en
los que uno se enciega y cuando ya crees que lo has probado todo...
A m� me funciona en varias m�quinas con Windows95 y JDK 1.1.4. No lo he
testeado en NT, Solaris, etc y tampoco he comprobado si en m�quinas con
diferentes idiomas se trastoca el funcionamiento.
Si no acaba de funcionar bien, talvez se deba a que hay que reajustar
los valores de las teclas KEY_ACENTO y KEY_BACENTO...
AQUI TIENES EL CODIGO......
import java.awt.TextField;
import java.awt.AWTEvent;
import java.awt.event.KeyEvent;
public class MyTextField extends TextField {
final static int LEN_TABLE = 10;
final static int KEY_ACENTO = 222; // tecla acento �
final static int KEY_BACENTO = 186; // tecla acento `
final static int INX_ACENTO = 1;
final static int INX_BACENTO = 3;
final static protected char converTable[][] = {
{ 'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U' },
{ '�', '�', '�', '�', '�', '�', '�', '�', '�', '�' },
{ '�', '�', '�', '�', '�', '�', '�', '�', '�', '�' },
{ '�', '�', '�', '�', '�', '�', '�', '�', '�', '�' },
{ '�', '�', '�', '�', '�', '�', '�', '�', '�', '�' }
};
protected int indexToTable = 0;
public MyTextField() {
super();
enableEvents(AWTEvent.KEY_EVENT_MASK);
}
public MyTextField(String text) {
super(text);
enableEvents(AWTEvent.KEY_EVENT_MASK);
}
public MyTextField(int columns) {
super(columns);
enableEvents(AWTEvent.KEY_EVENT_MASK);
}
public MyTextField(String text, int columns) {
super(text, columns);
enableEvents(AWTEvent.KEY_EVENT_MASK);
}
protected void processKeyEvent(KeyEvent e) {
super.processKeyEvent(e);
switch(e.getID()) {
case KeyEvent.KEY_PRESSED:
break;
case KeyEvent.KEY_RELEASED:
switch (e.getKeyCode()) {
case KEY_ACENTO:
indexToTable = INX_ACENTO;
break;
case KEY_BACENTO:
indexToTable = INX_BACENTO;
break;
case KeyEvent.VK_SHIFT:
if (indexToTable > 0) {
++indexToTable;
break;
}
default:
indexToTable = 0;
}
break;
case KeyEvent.KEY_TYPED:
if (indexToTable > 0) {
char ch = e.getKeyChar();
for (int cnt= 0; cnt < LEN_TABLE; cnt++)
if (converTable[0][cnt] == ch) {
e.setKeyChar(converTable[indexToTable][cnt]);
return;
}
}
break;
}
}
}
Espero que te sirva de ayuda. Saludos...
--
""""" | Sergio Martinez Gonzalez
O - | METHOD SOFTWARE
{ . } | e-mail: zengui@ibernet.com
--- o | www: no tengo todavia...
Technical Details
Message-ID:
<349F96BB.53378D83@ibernet.com>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailReferences:
<34991048.FE6C565F@iti.upv.es>Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII X-Google-Thread: 1116f3,c39d3eebaf80522 X-Google-Attributes: gid1116f3,public From: Sergio Martinez Gonzalez <zengui@ibernet.com> Subject: Re: Acentos Date: 1997/12/23 Message-ID: <349F96BB.53378D83@ibernet.com> X-Deja-AN: 309593053 Content-Transfer-Encoding: 8bit References: <34991048.FE6C565F@iti.upv.es> X-Priority: 3 (Normal) Content-Type: text/plain; charset=iso-8859-1 Organization: Method Software Mime-Version: 1.0 Newsgroups: es.comp.lenguajes.java