Visualizzazione dei risultati da 1 a 9 su 9

Discussione: [java] KeyListener

  1. #1

    [java] KeyListener

    Sto scrivendo una piccola applicazione che simula estrazioni del lotto per imparare i rudimenti della programmazione Java.

    Ho provato ad inserire la gestione degli eventi da tastiera ma non capisco bene come fare.

    Mi interesserebbe soprattutto pero' capire perche' il programma non funziona nel modo in cui l'ho scritto.

    Premesso che avevo usato una sola classe che implementava tutte le interfacce usate, ora ho commentato tutto lasciando soltanto l'addKeyListener nel costruttore e questa classe:

    codice:
        public class ScorciatoieTastiera extends KeyAdapter {
            // Implementazione dei metodi di KeyListener
            
            public void keyTyped(KeyEvent e) {
                testo.append("\n Pippo: " + Integer.toString(e.getKeyCode()) + " \n");
                if (e.getKeyCode()==KeyEvent.VK_S)
                    vai();
            }
        }
    (testo e' una JTextArea, vai() e' la routine principale)

    Ma i metodi non vengono mai eseguiti (provato da Debug)
    Se pero' tolgo tutti i Component dell'interfaccia grafica, i metodi (come per magia?) vengono eseguiti, ma ovviamente a video non vedo niente...
    Qual'e' il problema? Forse l'evento "tasto premuto" viene associato a qualche componente della GUI?

  2. #2
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    hai fatto da qualche parte nel codice:

    codice:
    ...
    testo.addKeyListener(new ScorciatoieTastiera());
    ...
    edit:
    ah si ora ho visto, l'hai messo nel costruttore, in questo caso non saprei .


    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  3. #3
    Questa e' la parte di codice del costruttore di cui accennavo:

    codice:
           finestra.add(pulsante);
            finestra.add(progresso);
            finestra.add(risultati);
            finestra.add(barra);
            finestra.add(etichettaRipetizioni);
            finestra.add(campoRipetizioni);
            finestra.add(reset);
            finestra.add(inizializza);
            finestra.addKeyListener(interagisci2);
    Se tolgo tutto (tranne l'ultima riga, ovvio) gli eventi da tastiera vengono gestiti.
    I vari componenti sono:

    codice:
           testo = new JTextArea("");
            barra = new JScrollPane(testo);
            pulsante = new JButton("");
            reset = new JButton("Reset!");
            etichettaRipetizioni = new JLabel("Numero di estrazioni desiderato");
            campoRipetizioni = new JTextField(12);
            progresso = new JProgressBar(0,100);
            inizializza = new JCheckBox("Inizializza il valore dei ritardi", true);
            risultati = new JComboBox(simula.getIntestazioni());

  4. #4
    Chiedo scusa, l'ultima riga che ho postato e' un mio esperimento per vedere se riuscivo a far funzionare il tutto... Il codice "corretto" (ma non funzionante, cmq) e'

    codice:
            
            finestra.add(pulsante);
            finestra.add(progresso);
            finestra.add(risultati);
            finestra.add(barra);
            finestra.add(etichettaRipetizioni);
            finestra.add(campoRipetizioni);
            finestra.add(reset);
            finestra.add(inizializza);
            addKeyListener(interagisci2);
    Alla fine il risultato e' lo stesso...

  5. #5
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    Originariamente inviato da dekdek
    Chiedo scusa, l'ultima riga che ho postato e' un mio esperimento per vedere se riuscivo a far funzionare il tutto... Il codice "corretto" (ma non funzionante, cmq) e'

    codice:
            
            finestra.add(pulsante);
            finestra.add(progresso);
            finestra.add(risultati);
            finestra.add(barra);
            finestra.add(etichettaRipetizioni);
            finestra.add(campoRipetizioni);
            finestra.add(reset);
            finestra.add(inizializza);
            addKeyListener(interagisci2);
    Alla fine il risultato e' lo stesso...
    in questo caso, a cosa associ addKeyListener?
    se ometti l'oggeto ci si riferisce a this, in che classe si trova il codice?

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  6. #6
    E' la classe principale, quella col main() insomma, a cui ho gia' associato gli ActionEvent e WindowEvent:

    codice:
    public class Lotto extends JFrame

  7. #7
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    finestra quindi cos'è un pannello?
    non è che a console vengono mostrati errori?

    potrebbe essere che se il componente a cui è associato il KeyLIstener non possiede il focus, non lo esegua.... :master:

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  8. #8
    finestra per ora e' un semplice Container in cui ficco tutti i componenti.

    potrebbe essere che se il componente a cui è associato il KeyPressed non possiede il focus, non lo esegua...
    Credo sia cosi'. Ho inserito un KeyListener per ogni componente della GUI ed ora funziona...
    Non e' una gran bella soluzione pero'... :rollo:

    Grazie per l'attenzione, cmq!!!

  9. #9
    Piccola precisazione, ho dovuto cambiare keyTyped in keyPressed, altrimenti getKeyCode mi ritornava sempre zero.

    Pero' la soluzione che ho ottenuto non mi piace...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.