Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 22
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442

    Come testare se un pulsante è stato premuto

    Quando l'utente preme il pulsante 'modifica', il pulsante 'salva' deve compiere azioni diverse.
    Come adempiere a questo scopo?
    Stavo guardando i vari metodi isPressed o isArmed dei jbutton ma non mi sembra che funzionino o forse non sono capace io di usarli.
    Ho provato con:

    codice:
    private void bSaveMenuActionPerformed(java.awt.event.ActionEvent evt) {                                          
            if (!bModMenu.getModel().isPressed()) { //Se non è stato premuto il pulsante modifica salvo il nuovo menu
                Menu newMenu = new Menu();
                newMenu.setMenuName(menuName.getText());
                int result = DBConnection.insertMenu(newMenu);
            //se l'inserimento è andato a buon fine abilito i campi per le altre operazioni
                //e ricarico la lista menu
                if (result == 1) {
    [altre operazioni]
                }
            } else { //è stato premuto il pulsante modifica e chiamo il metodo per modificare il menu
                Menu selectedMenu = (Menu) menuList.getSelectedValue();
                selectedMenu.setMenuName(menuName.getText());
                int result = DBConnection.updateMenu(selectedMenu);
                if (result == 1) {
    [altreoperazioni]
                }
            }
        }
    Ma non va, cioè mi salva sempre un nuovo menu invece di aggiornare quello corrente!

    Per completezza questo è il metodo che modifica il menu:

    codice:
            try {
                if (selectedMenu == null || selectedMenu.getMenuName().isEmpty()) {
                    JOptionPane.showMessageDialog(message);
                    return result;
                }
                statement = connection.prepareStatement("UPDATE Menu SET menuName=? WHERE (menuId=?)");
                statement.setString(1, selectedMenu.getMenuName());
                statement.setInt(2, selectedMenu.getMenuId());
                result = statement.executeUpdate();
    Grazie!
    Ultima modifica di Jamie04; 16-04-2014 a 18:34

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Jamie04 Visualizza il messaggio
    Quando l'utente preme il pulsante 'modifica', il pulsante 'salva' deve compiere azioni diverse.
    Come adempiere a questo scopo?
    Stavo guardando i vari metodi isPressed o isArmed dei jbutton ma non mi sembra che funzionino o forse non sono capace io di usarli.
    Detto molto in generale, quando un listener deve gestire eventi provenienti da più sorgenti (es. una singola implementazione di ActionListener per 2 pulsanti), la cosa più tipica è semplicemente quella di verificare il "source" dell'evento usando la comparazione dei reference con il source.

    codice:
    if (evt.getSource() == tuoPulsanteA) { 
        ...
    } else if (evt.getSource() == tuoPulsanteB) {
        ...
    }
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442
    Vediamo se ho capito, quindi al pulsante di salvataggio dovrei aggiungere l'ascolto delle azioni dei pulsanti nuovo e modifica oltre che la sua stessa azione?
    Tipo:
    bSaveMenu.addActionListener(bNewMenuActionPerforme d(evt));

    ? però mi da errore perché non trova evt, ma sicuramente sto sbagliando qualcosa

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Ti sta già rispondendo l'autorevolissimo andbin, ma credo che qui ci sia un problema di fondo: semplificare. Se è troppo complicato, probabilmente stai cercando di reinventare la ruota (ti assicuro che non serve). A meno che non mi sfugga qualcosa di macroscopico, che cosa ti impedisce di appiccicare ad ogni button il suo proprio listener? Che poi sia in forma di classe interna anonima oppure di implementazione con tutti i crismi (non che le classi interne anonime non abbiano tutti i crismi) quella è una scelta tua... però un unico incasinatissimo listener per gestire le azioni provenienti da più bottoni mi pare una strada davvero poco produttiva e difficile da percorrere.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442
    Quote Originariamente inviata da Andrea1979 Visualizza il messaggio
    Ti sta già rispondendo l'autorevolissimo andbin, ma credo che qui ci sia un problema di fondo: semplificare. Se è troppo complicato, probabilmente stai cercando di reinventare la ruota (ti assicuro che non serve).
    No no me ne guardo bene :-) il mio unico problema è che sono poco pratica e non conosco l'immensa dotazione di metodi e classi già esistenti, ogni volta che devo fare qualcosa cerco di capire se esiste qualcosa di già pronto ma non sempre trovo una risposta.

    Quote Originariamente inviata da Andrea1979 Visualizza il messaggio
    A meno che non mi sfugga qualcosa di macroscopico, che cosa ti impedisce di appiccicare ad ogni button il suo proprio listener? Che poi sia in forma di classe interna anonima oppure di implementazione con tutti i crismi (non che le classi interne anonime non abbiano tutti i crismi) quella è una scelta tua... però un unico incasinatissimo listener per gestire le azioni provenienti da più bottoni mi pare una strada davvero poco produttiva e difficile da percorrere.
    Ma è quello che sto cercando di fare...o forse non ho capito bene come funziona il tutto.
    Allora il legame deve essere fra i pulsanti 'nuovo', 'salva', 'modifica', e 'salva' deve accorgersi se è successo qualcosa a 'modifica' o 'nuovo' (in teoria). Nuovo e modifica hanno già i loro listener per le azioni che devono compiere.
    Quello che io dovrei fare è aggiungere due listener a 'salva' che ascoltano se l'evento richiesto è generato da nuovo o da modifica?

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    adesso è più chiaro. Allora, perché non registri da qualche parte (variabile), da dove "proviene" l'azione precedente? Per esempio, un int che setti a 1 se è stati premuto "Nuovo" e a 2 se è stato premuto "Modifica". Tali assegnazioni andranno ovviamente all'interno dei relativi listeners. A questo punto nel listener di "Salva" avrai un controllo su quella variabile e saprai subito da dove stai provenendo.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  7. #7
    Puoi usare il setActionCommand...io lo uso spesso...
    qui trovi un esempio:
    http://examples.javacodegeeks.com/de...d-for-jbutton/
    I computer sono incredibilmente veloci, accurati e stupidi.
    Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
    Insieme sono una potenza che supera l'immaginazione.

    A.Einstein

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Jamie04 Visualizza il messaggio
    Allora il legame deve essere fra i pulsanti 'nuovo', 'salva', 'modifica', e 'salva' deve accorgersi se è successo qualcosa a 'modifica' o 'nuovo' (in teoria). Nuovo e modifica hanno già i loro listener per le azioni che devono compiere.
    Quello che io dovrei fare è aggiungere due listener a 'salva' che ascoltano se l'evento richiesto è generato da nuovo o da modifica?
    Ok, un po' più chiaro. Inizialmente pensavo fosse solo un dubbio di come riconoscere la "sorgente" dell'evento ma ora capisco che c'è dell'altro ovvero considerare la sequenzialità di più eventi (anche differenti). Detto in altre parole, mantenere "memoria" di quali sono stati determinati eventi in precedenza. All'atto pratico basta mantenere la "memoria" di quei eventi usando delle semplici variabili (di istanza, non certo locali es. nel actionPerformed).

    Giusto un esempio per far capire:

    codice:
    private JButton pulsanteA;
    private JButton pulsanteB;
    private boolean pulsanteAPremuto = false;
    
    // .....
    
    public void actionPerformed(ActionEvent evt) {
        if (evt.getSource() == pulsanteA) {
            pulsanteAPremuto = true;
        } else if (evt.getSource() == pulsanteB) {
            if (pulsanteAPremuto) {
                // <azione da fare>
    
                pulsanteAPremuto = false;
            }
        }
    }

    Per poter eseguire quella <azione da fare> bisogna prima premere pulsanteA e poi premere pulsanteB.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442
    Ok, allora devo fare quello che volevo evitare, cioè l'uso di variabili false/true
    Quindi il metodo actionPerformed di cui sopra deve essere quello del pulsante 'salva', giusto?
    Ma questa istruzione:
    evt.getSource() == pulsanteB
    cosa fa esattamente? O meglio, in pulsanteB basta aggiungere un actionPerformed (che fa qualsiasi cosa, però appunto invia un messaggio al listener quando l'azione viene compiuta)? Quell'evt esattamente cosa è, il reference dell'oggetto evento?

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Jamie04 Visualizza il messaggio
    Ok, allora devo fare quello che volevo evitare, cioè l'uso di variabili false/true
    Se vuoi gestire una "sequenzialità", allora uno "stato" lo devi mantenere per avere memoria di cosa è successo. Poi potrebbero essere flag booleani, contatori o altro .... dipende dalla logica complessiva di questa sequenza.

    Il punto semmai è valutare se davvero hai bisogno di una cosa del genere. Non stai forse cercando di complicare "troppo"?

    Quote Originariamente inviata da Jamie04 Visualizza il messaggio
    Quindi il metodo actionPerformed di cui sopra deve essere quello del pulsante 'salva', giusto?
    Ma questa istruzione:
    evt.getSource() == pulsanteB
    cosa fa esattamente? O meglio, in pulsanteB basta aggiungere un actionPerformed (che fa qualsiasi cosa, però appunto invia un messaggio al listener quando l'azione viene compiuta)? Quell'evt esattamente cosa è, il reference dell'oggetto evento?
    Uhm, deduco che hai ancora da comprendere un po' di cose sui listener. Potrei descrivere un po' di cose ma in questo momento non ho molto tempo ..... sono riuscito a ripescare ora un mio vecchio post: http://forum.html.it/forum/showthrea...1#post13483980

    Prova a leggerlo, probabilmente ti aiuterà a chiarire alcune questioni. Se poi hai ancora altri dubbi, scrivo qui.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.