PDA

View Full Version : [java] JTextField


hello
07-07-2007, 18:39
se ho un JTextField

JTextField hello = new JTextField(2);

che riesce a visualizzare soltanto 3 caratteri, esempio: 123
se io digito 10 caratteri: 1234567890 questo visualizzerà 890

il problema è che quando premo invio vorrei che visualizzasse i primi 3 caratteri a sinistra cioè 123 e quando digito deve scrivere però da sinistra a destra!!!

è possibile farlo? :help: :help: :help:

PGI-Bis
07-07-2007, 18:51
Per un JTextComponent è possibile tutto e il contrario di tutto.

Un campo di testo possiede un Document (javax.swing.text.PlainDocument per i JTextField).

Il JTextField passa al suo Document il risultato di interazioni che abbiano a che fare con la manipolazione del testo. Per JTextField queste manipolazioni sono l'inserimento di una porzione di testo e la rimozione di porzioni di testo già inserite.

Il bello è che il campo di testo riproduce a video non ciò che l'utente digita ma quello che il suo Document produce come risultato della digitazione.

Se l'utente scrive "normalmente" e il Document aggiunge i caratteri all'inizio anzichè alla fine, il risultato sarà un testo invertito.

Se il Document accumula tutti i caratteri inseriti ma ne restituisce solo alcuni, il campo di testo proietterà solo quei caratteri che il suo Document decida di mostrare.

Per queste ed altre caratteristiche dico che si può fare.

Non ho capito tanto bene la faccenda dello scrivere da sinistra a destra per poi visualizzare la cifra "123".

Io digito -> nel campo di testo appare:

1 -> 1
2 -> 21
3 -> 321
4 -> 432
5 -> 543
6 -> 654
7 -> 765
8 -> 876
9 -> 987
0 -> 098

invio -> 123

E' così o non ho capito una mazza? Propendo per la seconda :D.

hello
07-07-2007, 19:08
sono stato io poco chiaro :p intendevo che l'allineamento del testo è a sinistra e quindi quando scrivo 1234567890 vedrò comparire 1 2 3 da sinistra a destra poi quando digito 4 il carattere 1 scompare perchè si sposterà a sinistra e il campo di testo (che riesce a visualizzare solo tre caratteri)visualizzerà 234
io vorrei che quando premo invio oppure mi sposto su un altro campo di testo quello in quello ho digitato 1234 visualizzi 123 e non 234

puoi spiegarmi per favore come fare :help:

grazie!!! ;)

hello
08-07-2007, 10:54
sono stato io poco chiaro :p intendevo che l'allineamento del testo è a sinistra e quindi quando scrivo 1234567890 vedrò comparire 1 2 3 da sinistra a destra poi quando digito 4 il carattere 1 scompare perchè si sposterà a sinistra e il campo di testo (che riesce a visualizzare solo tre caratteri)visualizzerà 234
io vorrei che quando premo invio oppure mi sposto su un altro campo di testo quello in quello ho digitato 1234 visualizzi 123 e non 234

puoi spiegarmi per favore come fare :help:

grazie!!! ;)

:help: :help: :help:

PGI-Bis
08-07-2007, 11:14
KeyListener e FocusListener. Se vuoi impedire la perdita del focus in caso di invalidità dell'input, InputVerifier.

Tutto ruota intorno al significato di quei numeri. L'interazione è una funzione del significato.

hello
08-07-2007, 14:05
:help: ma in che modo posso applicarlo ad esempio a questo

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class Test extends JFrame {
JButton button1=new JButton("prova");
JTextField textName=new JTextField(2);
//JTextField textName2=new JTextField(5);
Container c;

Test() {
super("Test");
setSize(200,100);
c=getContentPane();
c.setLayout(new FlowLayout());
c.add(button1);
c.add(textName);
//c.add(textName2);
setVisible(true);
}

public static void main(String[] args) {
Test app=new Test();
}
}

cioè se digito 1234567890 in quel campo quando premo invio/oppure un tasto visualizzerà (ciò che riesce a visualizzare in quello spazio) partendo dal primo carattere inserito, in questo caso 1

grazie!!! ;)
:help:

PGI-Bis
08-07-2007, 16:54
Prima di farti un esempio vorrei capire... perchè :D

L'utente può inserire solo numeri di tre cifre?

hello
08-07-2007, 17:27
3 era solo un esempio, in realtà il contenuto viene letto da un file ed avendola settata "setEnabled(false)" per non far modificare il contenuto, potrebbe non visualizzarlo dall'inizio!!! es. 12345.55566678 potrebbe apparire all'utente come 345.55566678 confondendolo!!! (in questo caso la dimensione è molto più grande di tre ma potrebbe non bastare a visualizzare tutto 12345.55566678 )

ho risolto usando setCaretPosition() :D

grazie mille!!! ciao ;)

PGI-Bis
08-07-2007, 17:48
ho risolto usando setCaretPosition() :D

Misteri dell'informatica :confused:

hello
08-07-2007, 18:39
Misteri dell'informatica :confused:

perchè? non va bene?
il mio scopo era quello di visualizzare il contenuto della casella di testo dal primo carattere inserito, e setCaretPosition(0) fa proprio questo!!!

ciao ;)

hello
08-07-2007, 23:28
Misteri dell'informatica :confused:

PGI-Bis mi hai rimasto con il dubbio!!! ma quello che ho fatto ha qlc che non va? te lo chiedo perchè mi hai sempre dato ottimi consigli e quindi vorrei, se possibile, un tuo parere.

grazie!!! ;)

PGI-Bis
09-07-2007, 12:28
Citerò l'immortale detto del programmatore alle strette: basta che vada. :D

Se con setCaretPosition() riesci a fare quello che devi allora setCaretPosition() va benissimo. Sono confuso perchè veramente non riesco ad afferrare che genere di dato deva trattare quel campo ma ciò che conta è che lo sappia tu, non io :). Insomma, tutto ok.

hello
09-07-2007, 13:08
inizialmente è una stringa che poi soltanto in un secondo momento converto in double

grazie ancora!!! ciao ;)