Visualizzazione dei risultati da 1 a 9 su 9

Discussione: JDialog

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    10

    JDialog

    nella creazione della mia interfaccia grafica sto saltando da un ostacolo all'altro..!
    nuovo problema:
    nel menuBar del mio frame principale ho creato un Item che dovrebbe lanciare un JDialog nel quale l'utente può effettuare una scelta tra 3 RadioButton.. la scelta deve provocare delle modifiche ad un oggetto che viene animato in un JPanel posto nel frame principale..
    ma non ho ben capito il funzionamento dei JDialog e sopratutto come faccio ad ottenere a far rimanere come selezionato il radio button anche alla chiusura della JDialog!
    qualcuno ha un'idea?
    grazieeee

  2. #2
    Utente di HTML.it L'avatar di Metflar
    Registrato dal
    Apr 2007
    Messaggi
    790

    Re: JDialog

    Originariamente inviato da S3CO
    nella creazione della mia interfaccia grafica sto saltando da un ostacolo all'altro..!
    nuovo problema:
    nel menuBar del mio frame principale ho creato un Item che dovrebbe lanciare un JDialog nel quale l'utente può effettuare una scelta tra 3 RadioButton.. la scelta deve provocare delle modifiche ad un oggetto che viene animato in un JPanel posto nel frame principale..
    ma non ho ben capito il funzionamento dei JDialog e sopratutto come faccio ad ottenere a far rimanere come selezionato il radio button anche alla chiusura della JDialog!
    qualcuno ha un'idea?
    grazieeee
    istanzia la JDialog solo una volta e nell'actionListener del tuo jbutton invochi solo il suo metodo setVisible(true);
    conoscenze: C/C++, Java, PHP, Python
    [No PM tecnici o di qualsiasi genere]

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    10
    scusa ma non ho capito cosa intendi..
    al menuItem aggiungo un actionListener il cui actionPerformed dovrebbe fare una cosa del genere
    { MioDialog dialog = new MioDialog();
    dialog.setVisible(true);
    }
    ...
    ma la classe MioDialog come dovrebbe essere composta?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da S3CO
    scusa ma non ho capito cosa intendi..
    al menuItem aggiungo un actionListener il cui actionPerformed dovrebbe fare una cosa del genere
    { MioDialog dialog = new MioDialog();
    dialog.setVisible(true);
    }
    ...
    ma la classe MioDialog come dovrebbe essere composta?
    Metflar voleva, giustamente, dire che la istanziazione del tuo MioDialog non la devi fare nel metodo actionPerformed (perché la faresti ogni volta che viene invocato, quindi lo stato della tua dialog non sarebbe "persistente") ma la devi fare una volta sola, tipicamente quando crei la tua interfaccia utente, nel tuo caso il frame principale.
    Il reference al tuo MioDialog lo assegni ad una variabile di istanza del tuo frame, in modo che il tuo oggetto MioDialog possa restare in "vita" tutto il tempo che ti serve. E mostrare/nascondere la dialog sarà poi solo questione di un setVisible con true o false. Lo stato della tua dialog, cioè i componenti e a sua volta il loro stato, resterà così l'ultimo che è stato impostato.

    E comunque non è l'unica soluzione. Nessuno vieta di fare in modo che il tuo MioDialog possa ricevere e poi restituire una qualche informazione (es. un intero o altro) che indica la selezione.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    10
    Originariamente inviato da andbin
    ....
    E comunque non è l'unica soluzione. Nessuno vieta di fare in modo che il tuo MioDialog possa ricevere e poi restituire una qualche informazione (es. un intero o altro) che indica la selezione.
    ..ecco è proprio quello che cercavo di realizzare.. praticamente il mio JDialog dovrebbe solamente settare l'immagine dell'oggetto che devo animare.. quindi mi servirebbe che il JDialog, attraverso i radioButton, settasse l'immagine della classe che gestisce l'animazione.. in modo che il metodo paintComponent riceva una diversa icona da dover disegnare senza cambiare il moto..
    ma non riesco a farlo funzionare!

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    10
    .. avevo pensato di aggiungere al JMenuItem una classe che estenda una AbtractAction, la quale crea il JDialog con i RadioButton e un JButton per dare conferma.. e una volta data la conferma restituisce la scelta selezionata alla classe in padre..
    ma non riesco a capirne il meccanismo!!! :master:

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    10
    chiedo consiglio perchè veramente non riesco a risolvere questa situazione..
    nella classe del mio frame principale creo la menu bar e poi i meni con gli item:

    JMenuItem impostazioni = new JMenuItem("Impostazioni");
    ..
    MyAbstractAction action = new MyAbstractAction();
    impostazioni.addActionListener(action);
    ...

    e poi dovrei creare una classe MyActionListener che estenda AbtractAction che faccia:
    _ creare una JDialog con radio button
    _ritornare il valore del RadioButton selezionato e tenerlo Enable
    ..
    che forma dovrebbe avere uesta classe? non riesco a far apparire nulla..

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da S3CO
    MyAbstractAction action = new MyAbstractAction();
    impostazioni.addActionListener(action);
    ...

    e poi dovrei creare una classe MyActionListener che estenda AbtractAction
    Per come intendi usarlo tu, un Action sarebbe del tutto superfluo. Un Action ha uno scopo ben particolare: quello di poter associare ad un event handler degli attributi "visuali" come una icona, una descrizione, uno stato di attivato/disattivato e alcune altre cose.

    Immagina che una certa "azione" sia invocabile sia tramite una voce di menù, sia da un pulsante su una toolbar. In tal caso una Action è l'ottimale. Sia la voce di menù che il pulsante sulla toolbar potranno avere così la stessa icona, lo stesso testo, la stessa azione ecc.... E se devi abilitare/disabilitare la azione, basta che agisci con setEnabled() solamente sulla Action e la (dis)abilitazione si ripercuoterà automaticamente su tutti i componenti che hanno quella Action.
    Quindi, come vedi le Action servono a questo. Certo .... un Action estende ActionListener quindi puoi anche passarla ad un addActionListener ma non sarebbe questo lo scopo per cui sono state fatte!!

    Originariamente inviato da S3CO
    _ creare una JDialog con radio button
    _ritornare il valore del RadioButton selezionato e tenerlo Enable
    ..
    che forma dovrebbe avere uesta classe? non riesco a far apparire nulla..
    Ma una soluzione l'ha detta Metflar e l'ho ribadita io. Puoi creare la tua dialog una volta sola in modo che "viva" per tutta il tempo che ti serve e a quel punto si tratta solo di rendere visibile/invisibile la dialog al momento opportuno. Il suo "stato" resterà l'ultimo, cioè se rendi visibile la dialog e clicchi su un suo radio button e poi nascondi la dialog, la prossima volta che la rendi visibile quel radio button è ancora selezionato.

    E come avevo detto io, non è l'unica soluzione. Un'altra soluzione è fare in modo che la tua dialog riceva e restituisca un valore che indica quale radio button è stato selezionato.

    Una cosa del tipo (molto abbozzata ... ora non ho molto tempo):

    codice:
    public class MiaDialog extends JDialog {
        public static final int RADIO_1 = 0;
        public static final int RADIO_2 = 1;
        public static final int RADIO_3 = 2;
    
        private JRadioButton radio1;
        private JRadioButton radio2;
        private JRadioButton radio3;
    
        ...
        public int getSelezione () {
            // .... in base al radio che è selezionato fai ritornare una costante RADIO_X ....
        }
    
        public void setSelezione (int selezione) {
            // .... in base a 'selezione' (uno dei RADIO_X) selezioni uno dei radio ....
        }
    }
    In questo modo l'oggetto della tua dialog puoi anche crearlo ogni volta che vuoi, pure nel actionPerformed del tuo listener. L'importante è che lo "stato" della selezione te lo sei memorizzato da qualche altra parte (es. variabile di istanza). Prima di rendere visibile la dialog imposti la selezione e quando la dialog si è chiusa vai a ripescare la selezione e te la memorizzi.
    A quel punto l'oggetto della dialog può anche sparire.

    Per dirla in altro modo, così facendo mantieni in modo persistente durante l'esecuzione del programma solamente una indicazione (un banale valore int) dello stato e non tutta la dialog con lo stato completo di ogni componente.

    Come vedi le possibilità ci sono .... decidi tu.
    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
    Jun 2008
    Messaggi
    10

    alla fine ha funzionato seguendo le tue indicazioni..
    grazie per la pazienza..

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.