Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Domanda sul JTextField!!

43 views
Skip to first unread message

Marica d'Elia

unread,
Apr 6, 1999, 3:00:00 AM4/6/99
to
Salve a tutti ,
ho un piccolo problemino, e volevo chiedervi cortesemente una mano!
Ho creato un JTextField :
JTextField text = new javax.swing.JTextField () ;
il problema č che io vorrei fissare un numero fisso di caratteri che
l'utente puň scrivere sul JTextField
e fare in modo che arrivato al massimo non possa piů scrivere nulla!
Come posso fare ?Ho guardato sui metodi e ne ho anche provato qulacuno
am proprio non riesco!
Per favore potete aiutarmi?

Vi ringrazio anticipatamente
MARICA

Stefano Reksten

unread,
Apr 6, 1999, 3:00:00 AM4/6/99
to

Marica d'Elia ha scritto:

>
> Salve a tutti ,
> ho un piccolo problemino, e volevo chiedervi cortesemente una mano!
> Ho creato un JTextField :
> JTextField text = new javax.swing.JTextField () ;
> il problema è che io vorrei fissare un numero fisso di caratteri che
> l'utente può scrivere sul JTextField
> e fare in modo che arrivato al massimo non possa più scrivere nulla!

> Come posso fare ?Ho guardato sui metodi e ne ho anche provato qulacuno
> am proprio non riesco!
> Per favore potete aiutarmi?
>
> Vi ringrazio anticipatamente
> MARICA

Marica, io ho affrontato qualcosa del genere. Anzi, esattamente il tuo
stesso problema, piu' il poter forzare a maiuscolo/minuscolo il testo
immesso. Ho esteso la classe JTextField e le ho fatto implementare
l'interfaccia KeyListener. Sull'evento keyTyped faccio controllare se il
numero di caratteri già immessi più l'eventuale nuovo carattere sia o
meno minore del limite massimo.
Il codice (togliendo la parte maiuscolo/minuscolo) è


import java.awt.*;
import java.awt.event.*;
import com.sun.java.swing.*;
import com.sun.java.swing.event.*;

public class JControlCaseTextField extends JTextField implements
KeyListener {

private int maxLength;

public JControlCaseTextField() {
maxLength = -1;
this.addKeyListener(this);
}

public void setMaxLength(int newMaxLength) {
maxLength = newMaxLength;
}

public int getMaxLength() {
return maxLength;
}

public void keyReleased(KeyEvent e) {}
public void keyPressed(KeyEvent e) {}
public void keyTyped(KeyEvent e) {
String ts = getText();
int cp = getCaretPosition();
char c = e.getKeyChar();
if (c == KeyEvent.VK_BACK_SPACE) {
if( ts.length() > 0) {
String head = ts.substring(0, cp);
String tail = ts.substring(cp);
setText(head + tail);
}
}
else if (c == KeyEvent.VK_ENTER) {
// mangio l'evento senza fare nulla, forse potrei fargli perdere il
focus o qc del genere?
}
else if (maxLength == -1 || ts.length() < maxLength) {
String head = ts.substring(0, cp);
String tail = ts.substring(cp);
setText(head + c + tail);
cp++;
}
setCaretPosition(cp);
e.consume();
}
}

Se qualcuno avesse migliorie o commenti, sono chiaramente benvenuti!

Stefano

Leonardo Boselli

unread,
Apr 7, 1999, 3:00:00 AM4/7/99
to
Marica d'Elia ha scritto:
>il problema č che io vorrei fissare un numero fisso di caratteri che
>l'utente puň scrivere sul JTextField
>e fare in modo che arrivato al massimo non possa piů scrivere nulla!

Devi associare il tuo JTextField ad un Document con il metodo insertString
opportunamente modificato. Un esempio semplice e' il seguente:

JTextField text = new JTextField();
text.setDocument(
new PlainDocument() {
int numeroMassimoDiCaratteri = 10;
public void insertString(int offset, String str, AttributeSet a)
throws BadLocationException
{
if(getLength() >= numeroMassimoDiCaratteri) return;
super.insertString(offset,str,a);
}
}
);

Ciao.
-- o JOB - The Java Objects Builder - Try it, it's FREE!
o o http://www.uno.it/utenti/tetractys/job.html
o o o TETRACTYS Software tetr...@uno.it
o o o o Leonardo Boselli bos...@uno.it


0 new messages