Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    KeyListener non funziona

    Ciao, vorrei che premendo un tasto della tastiera il testo di un bottone cambiasse.
    Per far ciò mi sto avvalendo di un KeyListener ma senza successo. Vorrei capire perché.
    Ecco il codice:

    final JFrame f = new JFrame(); f.setLocation(200, 100);
    f.setAlwaysOnTop(true);
    f.setSize(200, 500);
    f.getRootPane().setBorder(new MatteBorder(8, 8, 8, 8, Color.BLUE));
    f.setUndecorated(true);


    JPanel p = new JPanel();
    p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));
    f.add(p);

    //page buttons
    JPanel pNextPage = new JPanel();
    pNextPage.setSize(200, 50);
    JLabel lNextPage = new JLabel("Next page");
    final JButton bNextPage = new JButton(KeyEvent.getKeyText(pref.getKey(0)));
    pNextPage.add(lNextPage);
    pNextPage.add(bNextPage);
    p.add(pNextPage);

    KeyListener newKey = new KeyListener()
    {
    @Override
    public void keyPressed(KeyEvent e)
    {
    bNextPage.setText(KeyEvent.getKeyText(e.getKeyCode ()));
    }
    @Override
    public void keyReleased(KeyEvent e) {
    }
    @Override
    public void keyTyped(KeyEvent e) {
    }
    };
    f.addKeyListener(newKey);

    f.setVisible(true)
    Cosa è che causa questo mancato intervento del KeyListener?
    Ultima modifica di microprocessore; 10-08-2014 a 19:32

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Per queste cose usa le actions, il KeyListener ha uno scopo diverso da quello che vuoi dargli tu.

    http://docs.oracle.com/javase/tutori...eybinding.html

    ps: per postare codice il tag da usare è CODE e non QUOTE
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Ma a livello di codice cosa blocca il KeyListener?

    E poi, mi spiegheresti esattamente in che senso il KeyListener ha uno scopo diverso? Giusto per avere consapevolezza degli strumenti.

  4. #4
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Quote Originariamente inviata da microprocessore Visualizza il messaggio
    Ma a livello di codice cosa blocca il KeyListener?

    E poi, mi spiegheresti esattamente in che senso il KeyListener ha uno scopo diverso? Giusto per avere consapevolezza degli strumenti.
    Semplicemente il KeyListener non funziona su un container (come JFrame) se il focus appartiene a qualche componente figlio.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  5. #5
    ok. sto provando a gestire la situazione con le actions, ma non ottengo il risultato voluto.
    evidentemente sto sbagliato qualcosa. esattamente cosa?
    codice:
                    
                   Action update = new Action()                
                    {
                        public void actionPerformed(ActionEvent e) 
                        {
                            //do nothing
                            bNextPage.setText("AAAA");
                        }
    
    
                        @Override
                        public void addPropertyChangeListener(
                                PropertyChangeListener arg0) {
                            // TODO Auto-generated method stub
                            
                        }
    
    
                        @Override
                        public Object getValue(String arg0) {
                            // TODO Auto-generated method stub
                            return null;
                        }
    
    
                        @Override
                        public boolean isEnabled() {
                            // TODO Auto-generated method stub
                            return false;
                        }
    
    
                        @Override
                        public void putValue(String arg0, Object arg1) {
                            // TODO Auto-generated method stub
                            
                        }
    
    
                        @Override
                        public void removePropertyChangeListener(
                                PropertyChangeListener arg0) {
                            // TODO Auto-generated method stub
                            
                        }
    
    
                        @Override
                        public void setEnabled(boolean arg0) {
                            // TODO Auto-generated method stub
                        }
                    };
                    p.getInputMap().put(KeyStroke.getKeyStroke("F2"), update);

  6. #6
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Perché hai esteso (implementato) Action?
    Se guardi bene il link che ti avevo girato vedrai che la classe da cui partire è AbstractAction, che già fornisce tutti i metodi che tu hai "ridefinito" (lasciandoli vuoti, per forza "non funziona": non fa nulla!)

    codice:
    Action updateAction = new AbstractAction() {
    
        @Override
        public void actionPerformed(ActionEvent e) {
            System.out.println("HELLO!");
        }
    
    };
    
    ecc
    ecc
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  7. #7
    Quote Originariamente inviata da Alex'87 Visualizza il messaggio
    Perché hai esteso (implementato) Action?
    Se guardi bene il link che ti avevo girato vedrai che la classe da cui partire è AbstractAction, che già fornisce tutti i metodi che tu hai "ridefinito" (lasciandoli vuoti, per forza "non funziona": non fa nulla!)

    codice:
    Action updateAction = new AbstractAction() {
    
        @Override
        public void actionPerformed(ActionEvent e) {
            System.out.println("HELLO!");
        }
    
    };
    
    ecc
    ecc
    usando AbstractAction mi segnala il seguente errore:
    Type mismatch: cannot convert from new AbstractAction(){} to Action

  8. #8
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Occhio a importare le classi giuste:

    import javax.swing.AbstractAction;
    import javax.swing.Action;
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  9. #9
    strano che Eclipse non mi abbia suggerito di aggiungere la classe.
    Comunque anche con AbstractAction non va.
    Action update = new AbstractAction()
    {
    @Override
    public void actionPerformed(ActionEvent e) {
    System.out.println("HELLO!");
    }
    };

    p.getInputMap().put(KeyStroke.getKeyStroke("F2"), update);

  10. #10
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Sempre lo stesso errore?

    A me funziona alla perfezione... Puoi postare il codice completo? (usando il tag CODE e QUOTE, grazie)
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

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 © 2025 vBulletin Solutions, Inc. All rights reserved.