Per studiarmi il Java sto realizzando un semplice programma di emulazione di terminale. Per visualizzare i caratteri che arrivano dalla seriale uso un JTextField (o JTextArea .. non ricordo). Per inserire caratteri non ci sono problemi ma vorrei anche catturare i caratteri che vengono inseriti. Ho visto che basta non rendere editabile l' oggetto. Sono riuscito ad intercettare l' evento di key stroke ma non ho idea di come ottenere il tasto che e' stato premuto.
Qualcuno puo', per gentilezza, aiutarmi?
Ringrazio anticipatamente.
[Java] Intercettare la pressione di un tasto ... ed altro
Moderatori:
Paolino,
fairyvilje
15 messaggi
• Pagina 1 di 2 • 1, 2
0
voti
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
-

TardoFreak
73,9k 8 12 13 - -EY Legend-

- Messaggi: 15754
- Iscritto il: 16 dic 2009, 11:10
- Località: Torino - 3° pianeta del Sistema Solare
0
voti
Al momento non ho la possibilità di testarlo ma dovrebbe andare:

- Codice: Seleziona tutto
JTextField tf = new JTextField();
tf.addCaretListener(new CaretListener() {
void caretUpdate(CaretEvent e) {
String text = tf.getText();
System.out.println("Hai premuto " + text.subString(text.length() - 1, text.length());
});

http://millefori.altervista.org
Tool gratuito per chi sviluppa su millefori.
Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. (A. Einstein)
Se non c'e` un 555 non e` un buon progetto (IsidoroKZ)
Strumento per formule
Tool gratuito per chi sviluppa su millefori.
Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. (A. Einstein)
Se non c'e` un 555 non e` un buon progetto (IsidoroKZ)
Strumento per formule
-

posta10100
5.550 4 10 13 - Master EY

- Messaggi: 4832
- Iscritto il: 5 nov 2006, 0:09
0
voti
Sicuramente l' espressione
restituisce l' ultimo carattere.
Pensavo ci fosse la possibilita' d' intercettare direttamente l' input dalla tastiera.
Per ora usero' questo sistema.
Grazie.
- Codice: Seleziona tutto
text.subString(text.length() - 1, text.length())
restituisce l' ultimo carattere.
Pensavo ci fosse la possibilita' d' intercettare direttamente l' input dalla tastiera.Per ora usero' questo sistema.
Grazie.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
-

TardoFreak
73,9k 8 12 13 - -EY Legend-

- Messaggi: 15754
- Iscritto il: 16 dic 2009, 11:10
- Località: Torino - 3° pianeta del Sistema Solare
0
voti
Quello che ti ho mostrato prima è la via semplice, altrimenti puoi crearti il tuo oggetto textfield e fare l'overload del metodo processKeyEvent.
E nella tua classe usi l'oggetto che hai appena creato:
E' un po più complesso di quello di prima ma è l'unico modo se ad esempio vuoi che venga ad esempio ignorato un tasto:
- Codice: Seleziona tutto
public class MyTF extends JTextfield {
public MyTF() {
super();
}
protected void processKeyEvent(KeyEvent e) {
System.out.println("Premuto il tasto " + e.getKeyChar());
super.processKeyEvent(e); //Per far far scrivere il carattere nel textfield
//riutilizzo il codice del super
}
}
E nella tua classe usi l'oggetto che hai appena creato:
- Codice: Seleziona tutto
MyTF tf = new MyTF();
E' un po più complesso di quello di prima ma è l'unico modo se ad esempio vuoi che venga ad esempio ignorato un tasto:
- Codice: Seleziona tutto
// ignora il tasto "x"
protected void processKeyEvent(KeyEvent e) {
if (e.getKeyChar() != 'x') {
super.processKeyEvent(e);
}
}
http://millefori.altervista.org
Tool gratuito per chi sviluppa su millefori.
Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. (A. Einstein)
Se non c'e` un 555 non e` un buon progetto (IsidoroKZ)
Strumento per formule
Tool gratuito per chi sviluppa su millefori.
Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. (A. Einstein)
Se non c'e` un 555 non e` un buon progetto (IsidoroKZ)
Strumento per formule
-

posta10100
5.550 4 10 13 - Master EY

- Messaggi: 4832
- Iscritto il: 5 nov 2006, 0:09
0
voti
Ti ringrazio, anche perche' probabilmente usero' questo secondo sistema. Ho implementato l' altro che prende l' ultimo carattere ma non mi esalta l' idea di trattare una stringa, chesso', di 10000 caratteri per prenderne uno solo. Solo l' idea di implementarlo su un micro, mi fa venire l' oticaria. Ho la testa da micro, che ci vuoi fare?
Mentre siamo qui ti vorrei chiedere un' altra cosa. Da quanto ho potuto capire di funzione main ce ne deve essere una sola e questa viene chiamata alla partenza del programma o ce ne possono essere diverse? Te lo chiedo perche' il GUI builder di NetBeans, quando mi genera il file di una finestra, mi infila dentro anche una funzione main. Forse lo fa per permettermi di far girare il file in questione.
Se e' cosi' io, nell' applicazione finale, dovrei togliere questa mai e chiamare la classe dal mio main oppure la posso lasciare?
Mentre siamo qui ti vorrei chiedere un' altra cosa. Da quanto ho potuto capire di funzione main ce ne deve essere una sola e questa viene chiamata alla partenza del programma o ce ne possono essere diverse? Te lo chiedo perche' il GUI builder di NetBeans, quando mi genera il file di una finestra, mi infila dentro anche una funzione main. Forse lo fa per permettermi di far girare il file in questione.
Se e' cosi' io, nell' applicazione finale, dovrei togliere questa mai e chiamare la classe dal mio main oppure la posso lasciare?"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
-

TardoFreak
73,9k 8 12 13 - -EY Legend-

- Messaggi: 15754
- Iscritto il: 16 dic 2009, 11:10
- Località: Torino - 3° pianeta del Sistema Solare
0
voti
TardoFreak ha scritto: Ho la testa da micro, che ci vuoi fare?![]()
La testa da micro va bene, l'importante è non avere una micro testa!
TardoFreak ha scritto:Da quanto ho potuto capire di funzione main ce ne deve essere una sola e questa viene chiamata alla partenza del programma o ce ne possono essere diverse?
Di main ne puoi mettere quanti ne vuoi (ma non più di uno per classe), quando lanci il programma gli indichi anche quale deve usare quindi non crei nessun conflitto.
Generalmente si mette un metodo main nella classe principale e da li si richiamano tutte le altre classi.
IntelliJ quando crea una classe che implementa un dialog (con l'apposita utility per comporre i dialog per via grafica) chiede se vuoi aggiungere il metodo main.
Con questo metodo è possibile chiamare la finestra indipendentemente dal resto del programma allo scopo di vedere come viene visualizzata.
Personalmente non ho mai inserito il metodo main nella classe dei dialog, preferisco testare le finestre durante il loro reale funzionamento.
TardoFreak ha scritto:non mi esalta l' idea di trattare una stringa, chesso', di 10000 caratteri per prenderne uno solo.
Quando ho suggerito il primo metodo pensavo a stringhe inserite da tastiera, quindi da max un centinaio di caratteri.
Effettivamente se il numero di caratteri aumenta, e se devi ripetere molte volte l'operazione, il primo sistema non è l'ideale.
Se puoi spiegare un po più nel dettaglio cosa stai implementando magari ti posso suggerire qualche altra soluzione.

http://millefori.altervista.org
Tool gratuito per chi sviluppa su millefori.
Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. (A. Einstein)
Se non c'e` un 555 non e` un buon progetto (IsidoroKZ)
Strumento per formule
Tool gratuito per chi sviluppa su millefori.
Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. (A. Einstein)
Se non c'e` un 555 non e` un buon progetto (IsidoroKZ)
Strumento per formule
-

posta10100
5.550 4 10 13 - Master EY

- Messaggi: 4832
- Iscritto il: 5 nov 2006, 0:09
0
voti
Grazie per le delucidazioni.
Come ho detto all' inizio del thread sto realizzando un programma di emulazione di terminale per imparare il Java. Una cosa semplice: pulsante di connessione, combo box per la scelta della porta check boxes varie per i parametri ed una finestra di testo che rappresenta lo schermo del terminale.
In questo modo prendo famigliarita' con il linguaggio ed i vari componenti delle GUI.
Come ho detto all' inizio del thread sto realizzando un programma di emulazione di terminale per imparare il Java. Una cosa semplice: pulsante di connessione, combo box per la scelta della porta check boxes varie per i parametri ed una finestra di testo che rappresenta lo schermo del terminale.
In questo modo prendo famigliarita' con il linguaggio ed i vari componenti delle GUI.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
-

TardoFreak
73,9k 8 12 13 - -EY Legend-

- Messaggi: 15754
- Iscritto il: 16 dic 2009, 11:10
- Località: Torino - 3° pianeta del Sistema Solare
0
voti
Ho provato ma non mi funziona. Nel senso che se l' area di testo non e' editabile posso fare quello che voglio perche' il carattere premuto dalla tastiera lo inserisco io (o ci faccio altro), e fin qui bene.
Purtroppo mi sparisce il cursore ed io, in un programma di terminale, del cursore ne ho bisogno.
Se rendo l' area editabile gli eventi di processKeyEvent o keyPressed o keyTyped ariivano PRIMA che il carattere premuto venga inserito nell' area di testo. Il risultato e' che non posso neanche eliminare il carattere perche' ,,, non c'e' ancora.
Non so piu' come fare, non riesco a far venire fuori questo cavolo di cursore, sto diventando matto.
Qualcuno potrebbe aiutarmi?
Purtroppo mi sparisce il cursore ed io, in un programma di terminale, del cursore ne ho bisogno.
Se rendo l' area editabile gli eventi di processKeyEvent o keyPressed o keyTyped ariivano PRIMA che il carattere premuto venga inserito nell' area di testo. Il risultato e' che non posso neanche eliminare il carattere perche' ,,, non c'e' ancora.
Non so piu' come fare, non riesco a far venire fuori questo cavolo di cursore, sto diventando matto.
Qualcuno potrebbe aiutarmi?

"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
-

TardoFreak
73,9k 8 12 13 - -EY Legend-

- Messaggi: 15754
- Iscritto il: 16 dic 2009, 11:10
- Località: Torino - 3° pianeta del Sistema Solare
0
voti
TardoFreak ha scritto:Se rendo l' area editabile gli eventi di processKeyEvent o keyPressed o keyTyped ariivano PRIMA che il carattere premuto venga inserito nell' area di testo.
Si esatto, è giusto che sia così! Sono proprio loro che poi scrivono nel JTextField.
Puoi postare il pezzo di codice che stai utilizzando?
http://millefori.altervista.org
Tool gratuito per chi sviluppa su millefori.
Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. (A. Einstein)
Se non c'e` un 555 non e` un buon progetto (IsidoroKZ)
Strumento per formule
Tool gratuito per chi sviluppa su millefori.
Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. (A. Einstein)
Se non c'e` un 555 non e` un buon progetto (IsidoroKZ)
Strumento per formule
-

posta10100
5.550 4 10 13 - Master EY

- Messaggi: 4832
- Iscritto il: 5 nov 2006, 0:09
0
voti
Ho scritto questi 3 eventi in modo da essere sicuro della sequenza.
Se rendo la JTextArea editabile e premo, chesso', "W" e rilascio il tasto mi scriv su video "21W3", quindi non posso eliminare il testo perche' non c'e' ancora.
Se rendo la JTextArea NON editabile mi scrive "213" e qui andrebbe bene, solo che non c'e' piu' il cursore!
Non c'e' un sistema per rendere visibile il cursore anche se l' area non e' editabile?
Oppure un modo per inserirci un qualche ... "coso" su la gestione dell' evento che, in qualche modo, cancelli il tasto premuto?
Oppure esiste una altro controllo che puo' fare quel che vorrei io?
- Codice: Seleziona tutto
public void keyTyped(KeyEvent e)
{
if (e.getSource() == Schermo)
{
Schermo.append("1");
}
}
public void keyPressed(KeyEvent e)
{
if (e.getSource() == Schermo)
{
Schermo.append("2");
}
}
public void keyReleased(KeyEvent e)
{
if (e.getSource() == Schermo)
{
Schermo.append("3");
}
}
Se rendo la JTextArea editabile e premo, chesso', "W" e rilascio il tasto mi scriv su video "21W3", quindi non posso eliminare il testo perche' non c'e' ancora.
Se rendo la JTextArea NON editabile mi scrive "213" e qui andrebbe bene, solo che non c'e' piu' il cursore!
Non c'e' un sistema per rendere visibile il cursore anche se l' area non e' editabile?
Oppure un modo per inserirci un qualche ... "coso" su la gestione dell' evento che, in qualche modo, cancelli il tasto premuto?
Oppure esiste una altro controllo che puo' fare quel che vorrei io?
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
-

TardoFreak
73,9k 8 12 13 - -EY Legend-

- Messaggi: 15754
- Iscritto il: 16 dic 2009, 11:10
- Località: Torino - 3° pianeta del Sistema Solare
15 messaggi
• Pagina 1 di 2 • 1, 2
Chi c’è in linea
Visitano il forum: Nessuno e 11 ospiti

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)