Visualizzazione dei risultati da 1 a 10 su 11

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    480

    CLOSED_OPTION per WARNING.MESSAGE

    Ciao a tutti, ho un problema con questa situazione:
    codice:
    if (fileListMese.exists() == false) {
                            JOptionPane.showMessageDialog(this,
                                    "The radiation data for the month of " + m + " are not present",
                                    "Attention",
                                    JOptionPane.WARNING_MESSAGE,
                                    icon);
                            for (i = 0; i < righe; i++) {
                                tabellaMesi.setValueAt(" ", i, 0);
                                tabellaMesi.setValueAt(" ", i, 1);
                                tabellaMesi.setValueAt(" ", i, 2);
                                tabellaMesi.setValueAt(" ", i, 3);
                                tabellaMesi.setValueAt(" ", i, 4);
                            }
                        }
    Eseguo questo ciclo per 12 volte (mesi dell'anno) se ovviamente il metodo che apre in sequenza i file relativi ad ogni mese non trova il file del mese specificato. Ovviamente il messaggio del relativo mese non viene visualizzato se il file di quel mese è presente. Il problema è che se non sono presenti tutti i 12 mesi, comunque mi apre in sequenza il "warning message". Vorrei capire se è possibile utilizzare una CLOSED_OPTION, in modo tale da permettere all'utente di uscire da questa sequenza di messaggi in anticipo: E' possibile farlo ?

    Grazie
    Ultima modifica di roquentin; 26-03-2015 a 21:07

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da roquentin Visualizza il messaggio
    Il problema è che se non sono presenti tutti i 12 mesi, comunque mi apre in sequenza il "warning message". Vorrei capire se è possibile utilizzare una CLOSED_OPTION
    Il CLOSED_OPTION non c'entra niente (e nemmeno JOptionPane di per sé). È solamente questione di "logica" ....

    Una soluzione banale? Tieni una lista di String in cui man mano inserisci la stringa "The radiation .... not present" quando quel mese non è presente. Alla fine, se la lista non è vuota (=ci sono stati file mancanti) fai vedere 1 solo warning message sfruttando il fatto che nel 'message' puoi passare un String[] (non un List<String> occhio) per avere le scritte una per linea.

    Ma puoi farlo in mille altri modi ...
    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
    Jul 2014
    Messaggi
    480
    Non è esattamente quello che vorrei fare.
    Vorrei dare l'opportunità all'utente di chiudere la sequenza dei messaggi per qualsiasi mese.
    Per esempio l'utente potrebbe anche decidere di visualizzare i messaggi per Gennaio, Febbraio, Marzo, Aprile, poi visualizza anche quello di Maggioe decide che vuole interrompere la sequenza cliccando sulla "X".
    Mi sa tanto che con il WARNING.MESSAGE non è possibile farlo...che ne dici?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da roquentin Visualizza il messaggio
    Vorrei dare l'opportunità all'utente di chiudere la sequenza dei messaggi per qualsiasi mese.
    Per esempio l'utente potrebbe anche decidere di visualizzare i messaggi per Gennaio, Febbraio, Marzo, Aprile, poi visualizza anche quello di Maggioe decide che vuole interrompere la sequenza cliccando sulla "X".
    Ah, ok, ora mi è più chiaro. Però avrei ancora un dubbio: quando l'utente decide di "chiudere" la sequenza, intendi che non verranno più visualizzati ulteriori warning (ma vada comunque avanti con il processamento dei restanti mesi) oppure che termini proprio tutto il ciclo di processamento dei mesi?

    Comunque tieni presente che gli showMessageDialog hanno tipo di ritorno void, quindi non puoi sapere nulla in quel senso!

    Le possibilità comunque ci sono:
    - usare un altro dei showXXXDialog, magari con più pulsanti es. "Continua", "Termina".
    - usare ancora showMessageDialog mettendo però nel message un JCheckBox del tipo (come succede in molti software) es. "Non mostrare più per questa sequenza" e testarlo dopo il showMessageDialog (ti ricordo che il message è Object e può essere molte cose, vedi javadoc).
    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
    Jul 2014
    Messaggi
    480
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Ah, ok, ora mi è più chiaro. Però avrei ancora un dubbio: quando l'utente decide di "chiudere" la sequenza, intendi che non verranno più visualizzati ulteriori warning (ma vada comunque avanti con il processamento dei restanti mesi) oppure che termini proprio tutto il ciclo di processamento dei mesi?

    Comunque tieni presente che gli showMessageDialog hanno tipo di ritorno void, quindi non puoi sapere nulla in quel senso!

    Le possibilità comunque ci sono:
    - usare un altro dei showXXXDialog, magari con più pulsanti es. "Continua", "Termina".
    - usare ancora showMessageDialog mettendo però nel message un JCheckBox del tipo (come succede in molti software) es. "Non mostrare più per questa sequenza" e testarlo dopo il showMessageDialog (ti ricordo che il message è Object e può essere molte cose, vedi javadoc).
    Si esatto, cioè non deve più visualizzare il messaggio dei mesi ma va avanti con il processamento dei mesi che seguono (se ce ne sono).
    Ho fatto così:
    codice:
                if (contaMesi == 12) {
                    List<Mese> mese = ricercaMese.findDirectory(dir, pathname.getData());
                    for (i = 0; i < righe; i++) {
                        tabellaMesi.setValueAt(mese.get(i).getNomeMese(), i, 0);
                        tabellaMesi.setValueAt(mese.get(i).getMediaMeseIrradianzaG(), i, 1);
                        tabellaMesi.setValueAt(mese.get(i).getMediaMeseIrradianzaGd(), i, 2);
                        tabellaMesi.setValueAt(mese.get(i).getMediaMeseIrradianzaGc(), i, 3);
                        tabellaMesi.setValueAt(mese.get(i).getOreTotaliMese(), i, 4);
                    }
                } else {
                    i = 0; int j = 0;
                    for (ApriFileMese.MeseDellAnno m : ApriFileMese.MeseDellAnno.values()) {
                        fileMese = (dir + File.separator + pathname.getData() + File.separator + m + ".txt");
                        File fileListMese = new File(fileMese);
                        System.out.println(fileListMese);
                        System.out.println(m);
                        
                            if (fileListMese.exists() == false) {
                                
                                JOptionPane.showMessageDialog(this,
                                        "The radiation data for the month of " + m + " are not present",
                                        "Attention",
                                        JOptionPane.WARNING_MESSAGE,
                                        icon);
    
                                tabellaMesi.setValueAt(" ", i, 0);
                                tabellaMesi.setValueAt(" ", i, 1);
                                tabellaMesi.setValueAt(" ", i, 2);
                                tabellaMesi.setValueAt(" ", i, 3);
                                tabellaMesi.setValueAt(" ", i, 4);
                                i++;
                            } else if (fileListMese.exists() == true) {
                                List<Mese> mese = ricercaMese.findDirectory(dir, pathname.getData());
                                
                                    tabellaMesi.setValueAt(mese.get(j).getNomeMese(), i, 0);
                                    tabellaMesi.setValueAt(mese.get(j).getMediaMeseIrradianzaG(), i, 1);
                                    tabellaMesi.setValueAt(mese.get(j).getMediaMeseIrradianzaGd(), i, 2);
                                    tabellaMesi.setValueAt(mese.get(j).getMediaMeseIrradianzaGc(), i, 3);
                                    tabellaMesi.setValueAt(mese.get(j).getOreTotaliMese(), i, 4);
                                    i++;
                                    j++;
                                }
                            System.out.println(i);
                            
                        }
                    }
    quindi se i mesi esistono tutti me li apre e mi mette i dati nella JTable. Se invece non sono 12 allora comincia a dirmi tramite warning message (uno per volta) quello che manca, se qualcuno è presente mi prende i dati e me li inserisce e passa al successivo ..fino a Dicembre.
    Però se l'utente decidesse di non visualizzare più i messaggi, comunque deve andare avanti nel processarli. E' solo una questione di far decidere all'utente di smettere di visualizzare i messaggi dei mesi mancanti se si scoccia.

    p.s. anche io avevo pensato ad un altro showXXXDialog, ma volevo capire se si poteva fare con il Warning Message prima..che ne pensi ???

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da roquentin Visualizza il messaggio
    Però se l'utente decidesse di non visualizzare più i messaggi, comunque deve andare avanti nel processarli. E' solo una questione di far decidere all'utente di smettere di visualizzare i messaggi dei mesi mancanti se si scoccia.
    Ok, allora le due opzioni che ho detto prima (altro showXXXDialog con più pulsanti oppure showMessageDialog con checkbox) restano comunque valide!


    P.S. Il codice che hai postato poco fa risulta abbastanza fumoso e con evidenti ripetizioni di comportamento.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    480
    Quote Originariamente inviata da andbin Visualizza il messaggio
    oppure showMessageDialog con checkbox) restano comunque valide!


    P.S. Il codice che hai postato poco fa risulta abbastanza fumoso e con evidenti ripetizioni di comportamento.
    Ma a questo punto dovrei aggiungere una checkBox subito dopo ogni messaggio ?

    P.S. Mi diresti dove ti sembra fumoso e come potrei migliorarlo ?

    Grazie

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    480
    Io ho invece fatto una cosa ingarbugliata come questa (che però funziona allo scopo)
    che ne pensi?
    codice:
    if (contaMesi == 12) {
                    List<Mese> mese = ricercaMese.findDirectory(dir, pathname.getData());
                    for (i = 0; i < righe; i++) {
                        tabellaMesi.setValueAt(mese.get(i).getNomeMese(), i, 0);
                        tabellaMesi.setValueAt(mese.get(i).getMediaMeseIrradianzaG(), i, 1);
                        tabellaMesi.setValueAt(mese.get(i).getMediaMeseIrradianzaGd(), i, 2);
                        tabellaMesi.setValueAt(mese.get(i).getMediaMeseIrradianzaGc(), i, 3);
                        tabellaMesi.setValueAt(mese.get(i).getOreTotaliMese(), i, 4);
                    }
                } else {
                    i = 0;
                    j = 0;
                    boolean salta = false;
                    for (ApriFileMese.MeseDellAnno m : ApriFileMese.MeseDellAnno.values()) {
                        fileMese = (dir + File.separator + pathname.getData() + File.separator + m + ".txt");
                        File fileListMese = new File(fileMese);
                        System.out.println(fileListMese);
                        System.out.println(m);
    
                        if (fileListMese.exists() == false && salta == false) {
                            Object[] options = {"Continue", "Terminate"};
                            int answerMonth = JOptionPane.showOptionDialog(this,
                                    "The radiation data for the month of " + m + " are not present",
                                    "Warning", JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[0]);
                            if (answerMonth == 0 && salta == false) {
                                tabellaMesi.setValueAt(" ", i, 0);
                                tabellaMesi.setValueAt(" ", i, 1);
                                tabellaMesi.setValueAt(" ", i, 2);
                                tabellaMesi.setValueAt(" ", i, 3);
                                tabellaMesi.setValueAt(" ", i, 4);
                                i++;
                            } else if (answerMonth == 1 || answerMonth == JOptionPane.CLOSED_OPTION) {
                                tabellaMesi.setValueAt(" ", i, 0);
                                tabellaMesi.setValueAt(" ", i, 1);
                                tabellaMesi.setValueAt(" ", i, 2);
                                tabellaMesi.setValueAt(" ", i, 3);
                                tabellaMesi.setValueAt(" ", i, 4);
                                i++;
                                salta = true;
                            }
                        } else if (fileListMese.exists() == false && salta == true) {
                            tabellaMesi.setValueAt(" ", i, 0);
                            tabellaMesi.setValueAt(" ", i, 1);
                            tabellaMesi.setValueAt(" ", i, 2);
                            tabellaMesi.setValueAt(" ", i, 3);
                            tabellaMesi.setValueAt(" ", i, 4);
                            i++;
    
                        } else if (fileListMese.exists() == true) {
                            List<Mese> mese = ricercaMese.findDirectory(dir, pathname.getData());
    
                            tabellaMesi.setValueAt(mese.get(j).getNomeMese(), i, 0);
                            tabellaMesi.setValueAt(mese.get(j).getMediaMeseIrradianzaG(), i, 1);
                            tabellaMesi.setValueAt(mese.get(j).getMediaMeseIrradianzaGd(), i, 2);
                            tabellaMesi.setValueAt(mese.get(j).getMediaMeseIrradianzaGc(), i, 3);
                            tabellaMesi.setValueAt(mese.get(j).getOreTotaliMese(), i, 4);
                            i++;
                            j++;    
                        }
                    }
                }

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.