Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [Java] Disabilitare tasto invio

    Salve a tutti,

    ho creato una JFrame che estende JDialog modale.
    nel JFrame ho inserito due bottoni per confermare e annullare un operazione.

    Ora il mio problema è che in questa JDialog il focus va in automatico sul primo bottone (conferma) e premendo invio si conferma l'operazione anche se non ho implementato il KeyListener.

    Ho letto che un problema di questo tipo è dato dal Look And Feel di windows che imposta il focus.
    Mentre il tradizione di java no.

    codice:
    try{
                UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
            }catch(Exception e){
                  System.out.println("Impossibile caricare look&feel!");
            }
    Vorrei disabilitare il tasto invio in modo che l'utente deve per forza scegliere cliccando col mouse.
    come posso risolvere ?

    Grazie in anticipo

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da fcorsa Visualizza il messaggio
    Ho letto che un problema di questo tipo è dato dal Look And Feel di windows che imposta il focus.
    Mentre il tradizione di java no.
    Sì, è vero. Con il L&F predefinito (il "Metal") i pulsanti reagiscono solo allo "spazio" e non al "invio".

    Quote Originariamente inviata da fcorsa Visualizza il messaggio
    Vorrei disabilitare il tasto invio in modo che l'utente deve per forza scegliere cliccando col mouse.
    come posso risolvere ?
    La cosa più semplice è un KeyListener in cui si fa "consumare" l'evento se è per la pressione di INVIO:

    codice:
    tuoPulsante.addKeyListener(new KeyAdapter() {
        @Override
        public void keyPressed(KeyEvent e) {
            if (e.getKeyCode() == KeyEvent.VK_ENTER) {
                e.consume();
            }
        }
    });
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Sì, è vero. Con il L&F predefinito (il "Metal") i pulsanti reagiscono solo allo "spazio" e non al "invio".


    La cosa più semplice è un KeyListener in cui si fa "consumare" l'evento se è per la pressione di INVIO:

    codice:
    tuoPulsante.addKeyListener(new KeyAdapter() {
        @Override
        public void keyPressed(KeyEvent e) {
            if (e.getKeyCode() == KeyEvent.VK_ENTER) {
                e.consume();
            }
        }
    });
    Grazie Andbin,

    funziona alla grande.

    Avevo provato con il KeyListener che all'invio faceva un System.out.println("Niente");
    ma comunque faceva invio sul tasto col focus.
    Non sapevo di e.consume(); che fa consumare l'evento.
    Anche se non ho capito il perchè si deve consumare se avevo inserito un operazione nel keypressed.

    ciao grazie ancora

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.