Olá,
estou querendo fazer com que um TextField mostre as letras somente em UPPERCASE.
Existe alguma constraint do TextField ou parecido para fazer isso?
t+
Olá,
estou querendo fazer com que um TextField mostre as letras somente em UPPERCASE.
Existe alguma constraint do TextField ou parecido para fazer isso?
t+
Acho que isso responde a sua pergunta:
http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/JTextField.html
[]'s.
Aí, fera…
A maneira mais simples de se fazer isso é utilizando o método toUpperCase() do jTextField no evento KeyReleased…
A linha de código para isso fica assim:
Você pode colocar no evento KeyReleased, assim tudo fica maiúsculo à medida que você vai digitando, porém o cursor sempre ficará depois da última string; Para fugir disso eu utilizo no evento FocusLost (perca do foco, quando sair do jTextField), daí quando eu saio do jTextField ele todo fica em maiúsculo…
Tem jeito de fazer com KeyReleased sem o problema do cursor no fim da string; para isso você captura a posição do cursor no jTextField, coloca tudo maiúsculo e volta o cursor para a posição capturada… Não testei isso porque instalei o Ubuntu 8.04 aqui hoe e ainda não reinstalei o NetBeans para te dizer certinho como é que se faz, mas é por aí…
Um abraço…
O problema do KeyReleased é que ele pode não funcionar com CTRL+C e CTRL+V em algumas plataformas.
A maneira mais correta de se lidar com entradas e saídas de dados em um JTextField é lidando com a interface Document. Existe um tutorial no GUJ chamado controlando o JTextField, que ensina a usar um document para limitar o tamanho do JTextField.
Leia esse tutorial e, no método de insert do document, use o toUpperCase() que o colega falou.
[EDIT] Ops… agora que eu vi que é J2ME. Se não tiver o document por lá, ignore o que eu falei. :oops:
[quote=rafaelzulin]Olá,
estou querendo fazer com que um TextField mostre as letras somente em UPPERCASE.
Existe alguma constraint do TextField ou parecido para fazer isso?
t+[/quote]
Esqueça tudo o que este pessoal que não entende nada de J2ME disse…aliás, eles nem devem ter prestado atenção que estão no fórum de J2ME…
Respondendo sua pergunta: Não tem como. Não existe um Input Mode para as entradas aparecerem em maiúsculas.
Solução: Ou vc procura no Google por alguém que tenha implementado com CustoItem um TextField ve se tem isto (ou vc mesmo coloca isto), ou desenvolva o seu próprio TextField.
Realmente, peço mil desculpas pela besteira que escrevi. Realmente nem olhei que foi um post do fórum de JME…
Mais uma vez, perdão senhores…
[]'s.
ok!! valeu aí pelas respostas, apesar de que quase todas foram para jse. mas valeu mesmo assim…
t+
Então, continuando esse tópico…
Estava procurando na internet, se por acaso não havia um maneira de fazer com o um TextField mostre todas as letras em UPPERCASE. Enfim, o que eu encontrei em vários lugares, inclusive no site da sun, foi utilizar o método setInitialInputMode() do TextField. O que fiz foi assim:
TextField tf = null;
tf = new TextField("titulo", "", 10, TextField.ANY);
tf.setInitialInputMode("MIDP_UPPERCASE_LATIN");
Porém isso simplesmente não funciona. E eu encontrei isso em vários sites mesmo.
Olhem nesse site, na parte "Input Modes"
http://java.sun.com/javame/reference/apis/jsr118/javax/microedition/lcdui/TextField.html
Alguém, pode me dar uma mão ae??
t+
[quote=rafaelzulin]Então, continuando esse tópico…
Estava procurando na internet, se por acaso não havia um maneira de fazer com o um TextField mostre todas as letras em UPPERCASE. Enfim, o que eu encontrei em vários lugares, inclusive no site da sun, foi utilizar o método setInitialInputMode() do TextField. O que fiz foi assim:
TextField tf = null;
tf = new TextField("titulo", "", 10, TextField.ANY);
tf.setInitialInputMode("MIDP_UPPERCASE_LATIN");
Porém isso simplesmente não funciona. E eu encontrei isso em vários sites mesmo.
Olhem nesse site, na parte "Input Modes"
http://java.sun.com/javame/reference/apis/jsr118/javax/microedition/lcdui/TextField.html
Alguém, pode me dar uma mão ae??
t+
[/quote]
Eu já conhecia este INPUT MODE e justamente por saber do seu resultado é que eu te disse…vá atrás de alguém que tenha feito um TextField porquê com o do MIDP não você não vai conseguir fazer o que quer… :?
hum, ok… valew ae… já mudei o esquema que eu queria fazer.
t+
Basta você criar uma classe que extenda TextField, e sobrescrever o método setString().
Veja:
[code]public class UpperTextField extends TextField {
public UpperTextField(String label, String text, int max, int type) {
super(label, text, max, type);
}
public void setString(String str) {
super.setString(str.toUpperCase());
}
}[/code]
Agora onde você cria instâncias de TextField, troque por UpperTextField.
Abraço,
[quote=npereirajr]Basta você criar uma classe que extenda TextField, e sobrescrever o método setString().
Veja:
[code]public class UpperTextField extends TextField {
public UpperTextField(String label, String text, int max, int type) {
super(label, text, max, type);
}
public void setString(String str) {
super.setString(str.toUpperCase());
}
}[/code]
Agora onde você cria instâncias de TextField, troque por UpperTextField.
Abraço,[/quote]
olá…
então, eu testei aqui. Só que o método setString serve para alterar a String do TextField em determinado momento. O que eu queria, é que sempre aparecesse o texto em UPPERCASE, ou seja, o usuário nunca iria conseguir digitar um texto em lowcase, conforme o texto fosse digitado já aparecesse em UPPERCASE. E dessa forma não funciona.
Existe algum outro método que dá pra sobrescrever que possibilite isso
t+
[quote=rafaelzulin][quote=npereirajr]Basta você criar uma classe que extenda TextField, e sobrescrever o método setString().
Veja:
[code]public class UpperTextField extends TextField {
public UpperTextField(String label, String text, int max, int type) {
super(label, text, max, type);
}
public void setString(String str) {
super.setString(str.toUpperCase());
}
}[/code]
Agora onde você cria instâncias de TextField, troque por UpperTextField.
Abraço,[/quote]
olá…
então, eu testei aqui. Só que o método setString serve para alterar a String do TextField em determinado momento. O que eu queria, é que sempre aparecesse o texto em UPPERCASE, ou seja, o usuário nunca iria conseguir digitar um texto em lowcase, conforme o texto fosse digitado já aparecesse em UPPERCASE. E dessa forma não funciona.
Existe algum outro método que dá pra sobrescrever que possibilite isso
t+ [/quote]
Caro colega, resistir é inútil. Entregue os pontos e aceite o que te falei. Vai por mim, se faz tanta questão do UPPERCASE, você tem que partir pro que te sugeri. Não há outra maneira. Acabou de mais uma vez ter a confirmação através de post do npereirajr (nada contra ele),e que não resolve teu problema.
hehe eu já desisti de fazer um TextField mostrar somente em UPPERCASE, tanto é que já até mudei os esquema do meu programa. Mas não custa nada testar uma possível solução, embora já sabendo que não era o que eu queria…
t+
Seguinte, fiz uma implementação de teste usando ItemStateListener. Pelo menos nos emuladores do NetBeans funcionou
Aqui vai:
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class TesteUpper extends MIDlet implements ItemStateListener
{
private Form form;
private TextField text;
public TesteUpper()
{
form = new Form("TesteUpper");
form.setItemStateListener(this);
text = new TextField("Entrada:", null, 15, TextField.ANY);
form.append(text);
}
public void startApp()
{
Display.getDisplay(this).setCurrent(form);
}
public void pauseApp()
{}
public void destroyApp(boolean unconditional)
{}
public void itemStateChanged(Item i)
{
if(i == text)
{
text.setString(text.getString().toUpperCase());
}
}
}
Aproveitei, converti o .jad/.jar para .prc e instalei no meu Treo 680, com a J9 instalada e funcionou que foi uma maravilha, basta ir digitando e os caracteres vão ficando em maiúsculas.
[quote=tecnodic]Seguinte, fiz uma implementação de teste usando ItemStateListener. Pelo menos nos emuladores do NetBeans funcionou
Aqui vai:
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class TesteUpper extends MIDlet implements ItemStateListener
{
private Form form;
private TextField text;
public TesteUpper()
{
form = new Form("TesteUpper");
form.setItemStateListener(this);
text = new TextField("Entrada:", null, 15, TextField.ANY);
form.append(text);
}
public void startApp()
{
Display.getDisplay(this).setCurrent(form);
}
public void pauseApp()
{}
public void destroyApp(boolean unconditional)
{}
public void itemStateChanged(Item i)
{
if(i == text)
{
text.setString(text.getString().toUpperCase());
}
}
}
Aproveitei, converti o .jad/.jar para .prc e instalei no meu Treo 680, com a J9 instalada e funcionou que foi uma maravilha, basta ir digitando e os caracteres vão ficando em maiúsculas.[/quote]
Eu pensei em usar isso, porém que ocorre é que tenho que tratar todos os TextFields do meu programa (e não são poucos). Dessa forma, o que fiz foi converter tudo em uppercase na hora de enviar os dados…
Mesmo assim vlw
t+
Bom dia pessoal, estou com um problema num objeto TextField do framework polish. Alguém conhece? O problema é o seguinte: Crio um simples TextField na minha aplicação, adiciono a um objeto TabbedForm, porém ao digitar na caixa de texto, simplesmente não consigo, tenho que teclar Enter ou backspace e entrar num modulo de edição onde a caixa de texto ocupa toda a tela. Ai digito o que quero e aperto o botão OK. Que nesse caso, volta para a tela da aplicação, com o text preenchido. Alguém sabe como faço para permitir que o usuário digite normalmente no TextField. Lembrando que esse TextField é do framework polish.
não dá … isso ai é uma segurança do próprio aparelho … provavelmente tem teclas especiais e por isso ele abre essa caixa para capturar o texte e depois envia-los apra o textField …
eu fiz uma textField usando custom item … mas por justamente o aparelho que eu estava usando possuir essas teclas epecieas não levei o projeto a frente … se quizer ponho o código aqui … ai vocês podem melhorar-lo
só não esqueçam de verificar se o cógido referente a cada tecla está correto … esses códigos eu usava apra o htc
[code]import javax.microedition.lcdui.CustomItem;
import javax.microedition.lcdui.Font;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.TextField;
public class MTextField extends CustomItem {
private TextField tf = new TextField(null, null, 80, TextField.ANY);
private String string;
private String stringView;
private Font font;
private int type;
private boolean shift;
public static int PASSWORD = 1;
public static int ANY = 0;
public MTextField(int type){
super(null);
this.string = new String("");
this.stringView = new String("");
this.type = type;
this.font = null;
this.shift = false;
}
public void paint(Graphics g, int w, int h) {
int wMin = 0;
int hMin = 0;
int wMax = w-1;//tf.getPreferredWidth()-1;
int hMax = h-1;//tf.getPreferredHeight()-1;
g.setColor(255, 255, 255);
g.fillRect(wMin, hMin, wMax, hMax);
g.setColor(0, 0, 0);
g.drawRect(wMin, hMin, wMax, hMax);
g.drawLine(wMin, hMin, wMin, hMax);
g.drawLine(wMin, hMin, wMax, hMin);
g.drawLine(wMax, hMin, wMax, hMax);
g.drawLine(wMin, hMax, wMax, hMax);
if(font!=null) g.setFont(font);
g.drawString(stringView,1,0,0);
//Paint ur own stuff here
}
public Font getFont() {
return font;
}
public void setFont(Font font) {
this.font = font;
}
public String getString() {
return string;
}
public void setString(String string) {
this.string = string;
}
protected int getPrefContentHeight(int height){
return tf.getPreferredHeight();
}
protected int getPrefContentWidth(int width){
return tf.getPreferredWidth();
}
protected int getMinContentHeight(){
return tf.getMinimumHeight();
}
protected int getMinContentWidth() {
return tf.getMinimumWidth();
}
protected void keyPressed(int keyCode){
//write ur code here to do stuff
if(keyCode==8){
stringView = stringView.substring(0, string.length()-1);
string = string.substring(0, string.length()-1);
} else if(keyCode==13){
shift = !shift;
} else if(shift){
shift = !shift;
string += String.valueOf(keyUpName(keyCode));
if(type == MTextField.PASSWORD)
stringView += String.valueOf('*');
else
stringView = string;
} else {
string += String.valueOf(keyName(keyCode));
if(type == MTextField.PASSWORD)
stringView += String.valueOf('*');
else
stringView = string;
}
repaint();
}
private char keyName(int keyCode){
switch(keyCode){
case 35:
return 'a';
case 98:
return 'b';
case 56:
return 'c';
case 53:
return 'd';
case 50:
return 'e';
case 54:
return 'f';
case 103:
return 'g';
case 104:
return 'h';
case 105:
return 'i';
case 106:
return 'j';
case 107:
return 'k';
case 108:
return 'l';
case 109:
return 'm';
case 110:
return 'n';
case 111:
return 'o';
case 112:
return 'p';
case 113:
return 'q';
case 51:
return 'r';
case 52:
return 's';
case 116:
return 't';
case 117:
return 'u';
case 57:
return 'v';
case 49:
return 'w';
case 55:
return 'x';
case 121:
return 'y';
case 42:
return 'z';
case 46:
return '.';
case 44:
return ',';
case 32:
return ' ';
case 48:
return '0';
//enter-13
}
return ' ';
}
private char keyUpName(int keyCode){
switch(keyCode){
case 35:
return '#';
case 98:
return ',';
case 56:
return '8';
case 53:
return '5';
case 50:
return '2';
case 54:
return '6';
case 103:
return '/';
case 104:
return '?';
case 105:
return '-';
case 106:
return 'ç';
case 107:
return 'º';
case 108:
return 'ª';
case 109:
return '=';
case 110:
return '@';
case 111:
return '_';
case 112:
return '"';
case 113:
return '!';
case 51:
return '3';
case 52:
return '4';
case 116:
return '+';
case 117:
return ')';
case 57:
return '9';
case 49:
return '1';
case 55:
return '7';
case 121:
return '(';
case 42:
return '*';
case 46:
return ':';
case 44:
return ';';
case 32:
return ' ';
case 48:
return '0';
//enter-13
}
return ' ';
}
}[/code]