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

    [Java] Cancellare effetti azione JButton!

    Vi spiego il quesito...
    Ho una serie di JPanel in un unico JFrame,
    questi JPanel si alternano tramite vari CardLayout,
    per esempio il frame all'inizio è diviso in due JPanel,
    uno contiene dei pulsanti JButton e l'altro che chiamerò
    di seguito panX è diviso in altri JPanel richiamati dai JButton;
    anche questi JPanel sono divisi altri due JPanel di seguito subA e subB.
    In subA ho altri JButton, di seguito butA, che alternano i subB
    tramite un CardLayout e alcuni richiamano delle JOptionPane.

    Cosa mi succede... se con un butA che apre una JOptionPane.showConfirmDialog
    faccio terminare una sequenza di inserimento dati e cancellare il contenuto di panX,
    usando removeAll(); validate(); e repaint(); , che contiene lo stesso butA e dopo,
    dal JButton di partenza vado a ricreare di nuovo i JPanel.... succede che,
    alla pressione del butA, mi vengono creati due JOptionPane e così via in modo
    lineare, cioè se termino di nuovo, alla pressione del butA mi creerà tre JOptionPane
    e così via. E' come se l'azione del pulsante, benchè vengano cancellati i JPanel che
    lo contengano, rimane e tiene conto delle volte che è stato premuto!!!

    Come posso risolvere il problema!?
    So che senza postare il codice è più complicato,
    ma è tanto e frazionato in tante classi!!

    Grazie per l'attenzione.

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    Re: [Java] Cancellare effetti azione JButton!

    Originariamente inviato da Wolvy23
    Come posso risolvere il problema!?
    So che senza postare il codice è più complicato,
    ma è tanto e frazionato in tante classi!!
    Non serve che posti tutto, ma la parte che gestisce il meccanismo che hai spiegato sopra. Altrimenti non ti si può dire molto...

    Originariamente inviato da Wolvy23
    E' come se l'azione del pulsante, benchè vengano cancellati i JPanel che
    lo contengano, rimane e tiene conto delle volte che è stato premuto!!!
    Non è che aggiungi più volte lo stesso action listener al pulsante?
    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
    Credo di aver risolto...

    .... in pratica assegnavo l'action ai pulsanti in un'altra Classe
    richiamando la Classe stessa e non l'istanza che crea i pulsanti....

    Esempio:

    classe costruttrice del JPanel con i pulsanti: ClassePulsanti
    In un'altra classe dove creavo un altro JPanel e assegnavo l'action
    ai pulsanti, l'assegnazione la facevo così:
    codice:
    .....
    ClassePulsanti panelPulsanti = new ClassePulsanti();
    
    ClassePulsanti.pulsanteA.addActionListener(new ActionBtn());
    ClassePulsanti.pulsanteB.addActionListener(new ActionBtn());
    ClassePulsanti.pulsanteC.addActionListener(new ActionBtn());
    
    ....
    public class ActionBtn implements ActionListener {
    	public void actionPerformed (ActionEvent e) {.....
    Quindi, credo che l'errore era questo, poiché cancellando un JPanel che
    ne contiene gli altri, io cancellavo le istanze ma facendo l'assegnazione
    richiamando la Classe, questa non veniva cancellata, perciò conservava
    l'azione e ogni volta che i pannelli venivano ridisegnati assegnavo nuovamente
    un'altra Action agli stessi pulsanti!!!

    Corretto così il codice funziona:
    codice:
    .....
    ClassePulsanti panelPulsanti = new ClassePulsanti();
    
    panelPulsanti.pulsanteA.addActionListener(new ActionBtn());
    panelPulsanti.pulsanteB.addActionListener(new ActionBtn());
    panelPulsanti.pulsanteC.addActionListener(new ActionBtn());
    
    ....
    public class ActionBtn implements ActionListener {
    	public void actionPerformed (ActionEvent e) {.....
    Non è che aggiungi più volte lo stesso action listener al pulsante?
    E in sostenza avveniva quello che dici tu!!

    Grazie dell'attenzione

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.