Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di Shmoo
    Registrato dal
    Jun 2010
    Messaggi
    13

    Problema con KeyListener e focus

    Ciao a tutti, ho realizzato un programma con grafica. La finestra che appare all'utente è:

    jTextField per la username

    jPasswordField per la password

    CheckBox per rendere visibili i caratteri del jPasswordField

    JButton per il login

    Vorrei che l'utente possa, oltre ad utilizzare il mouse e premere il JButton per effettuare il login, premere in QUALSIASI momento ENTER e ottenere la stessa soluzione.

    Il mio problema è che per far ciò devo impostare il focus sul JButton, il che è inutile perchè per inserire username e password il focus si sposta nuovamente e l'utente deve usare tab per spostarsi sul pulsante di login.

    Riassumendo vorrei che premendo invio il programma lo interpretasse come un click del mouse sul pulsante, indipendentemente da dove si trova il focus in quel momento.
    E' possibile?

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Leggiti questo
    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
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Oltre a quanto linkato correttamente da Alex'87, c'è anche la possibilità di aggiungere un ActionListener alle textfield (sia JTextField, che JPasswordField). Di conseguenza, un modo alternativo per ottenere ciò che vuoi è assegnare alle due textfield lo stesso ActionListener che hai assegnato al JButton.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4
    Utente di HTML.it L'avatar di Shmoo
    Registrato dal
    Jun 2010
    Messaggi
    13
    Grazie per le risposte. Ora guardo la soluzione proposta da Alex'87. Visto che ci sono vi propongo la mia idea e se possibile mi potete dire dove sbaglio?

    codice:
    public void keyPressed(KeyEvent ke){
        if(ke.getKeyCode() == KeyEvent.VK_ENTER){
            b.requestFocus();
            b.doClick();
        }    
    }
    dove b è il JButton.

    In teoria il KeyListener, una volta premuto ENTER da tastiera, dovrebbe rimandarmi a keyPressed che mi imposta il focus sul JButton e doClick() fa come se il pulsante venisse premuto e passa la palla all'ActionListener no?

  5. #5
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Su cosa lo hai registrato quel listener?

    Originariamente inviato da Shmoo
    doClick() fa come se il pulsante venisse premuto e passa la palla all'ActionListener no?
    Esatto.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  6. #6
    Utente di HTML.it L'avatar di Shmoo
    Registrato dal
    Jun 2010
    Messaggi
    13
    codice:
    //costruttore della classe GUI che estende JFrame
    public GUI(){
        //creo l'intera parte grafica
        //frame, panel, ...
    
        b = new JButton("Check");
        Dimension bSize = b.getPreferredSize();
        b.setBounds(200 + insets.left - bSize.width, 205 + insets.top, bSize.width * 2, bSize.height);
        panel.add(b);
        
        //altre proprietà di label, JTextField
    
        b.addActionListener(this);  //listener sul click del mouse
        b.addKeyListener(this);   //listener su ENTER
    }
    
    @Override
    public void actionPerformed(ActionEvent e){
        //esegue le varie funzioni che dipendono da e
    }
    
    @Override
    public void keyPressed(KeyEvent ke){
        if(ke.getKeyCode() == KeyEvent.VK_ENTER){
            b.requestFocus();
            b.doClick();
        }    
    }
    il codice è abbastanza lungo spero si capisca abbastanza ance se ho tagliato

    ps non ho ben capito cosa intendi per: Su cosa lo hai registrato quel listener? spero che dal codice che ho riportato si capisca

  7. #7
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da Shmoo
    ps non ho ben capito cosa intendi per: Su cosa lo hai registrato quel listener? spero che dal codice che ho riportato si capisca
    Si capisce da qua: b.addKeyListener(this);
    In pratica stai dicendo "quando il pulsante b ha il focus e premo ENTER, do il focus al pulsante b e lo clicco"

    Il listener dovresti metterlo ad un componente più alto della gerarchia, oppure fai quello che è mostrato nel link che ti ho messo prima, che ti semplifica molto
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  8. #8
    Utente di HTML.it L'avatar di Shmoo
    Registrato dal
    Jun 2010
    Messaggi
    13
    Ok! Non mi è chiarissimo il keybinding, ora lo riguardo meglio e provo a prendere quella strada

  9. #9
    Utente di HTML.it L'avatar di Shmoo
    Registrato dal
    Jun 2010
    Messaggi
    13
    Grazie mille ho risolto

  10. #10
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da Shmoo
    Grazie mille ho risolto
    Prego
    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.