Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    JCalendar come JOptionPane: possibile? Alternative?

    Salve a tutti,

    per la mia applicazione ho usato spesso JDateChooser, ma in una circostanza particolare ho bisogno del JCalendar, della toedter.
    Vorrei poter fare una cosa del genere:
    codice:
    Date d = JCalendar.showDateChoserDialog(parent)
    Ho provato a mettere il JCalendar in un JDialog, ma non riesco a catturare il valore della data alla chiusura del JDialog.
    Il problema principale è che questo Dialog deve essere bloccante. Es.
    1) clicco su un bottone "Scegli data"
    2) Compare il JCalendar e blocco l'esecuzione del codice che chiama il jCalendar
    3) seleziono la data e la restituisco (come da esempio precedente)
    4) prendo la data e continuo con il mio codice

    Come potrei fare?

    Ho già cercato all'interno di questo subforum ed effettivamente ho trovato diverse discussioni inerenti il JCalendar, ma non ho trovato nulla che risponda alla mia problematica. Ho cercato anche nella documentazione ma non ho proprio capito come poter risolvere.

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: JCalendar come JOptionPane: possibile? Alternative?

    Originariamente inviato da fbcyborg
    Come potrei fare?
    Gli showXXXDialog() di JOptionPane hanno un parametro "message" che è un Object. Può essere svariate cose (si veda javadoc) ma in particolare può anche essere un Component.
    Quindi è perfettamente possibile mostrare nel option pane uno dei componenti della libreria JCalendar.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Wow!!

    Questa è un'ottima notizia, grazie!
    Ci provo subito. Se ho problemi ti faccio sapere.

  4. #4
    Ottimo, sono riuscito a fare come dici, semplicemente così:
    codice:
    JCalendar cal = new JCalendar();
    cal.setLocale(new Locale("it", "IT"));
    JOptionPane.showMessageDialog(parent, cal, "Selezionare la data",JOptionPane.PLAIN_MESSAGE);
    Ora il mio problema è questo: vorrei che il mio JOptionPane invece che un int restituisse proprio la data, quindi vorrei fare:
    Date d = JOptionPane.showMessageDialog(parent, cal, "Selezionare la data",JOptionPane.PLAIN_MESSAGE);
    (volendo sarebbe opportuno che Date fosse quello di java.sql, ma per ora mi accontento di java.util, o GregorianCalendar insomma).

    La soluzione che mi è venuta in mente è questa. Creare una classe che estende JOptionPane e che implementa un metodo getDate(), in modo da poter fare un getDate() dopo la chiusura del JOptionPane.
    O comunque in qualche modo, alla pressione del tasto OK devo ritornare una data al chiamante.

    Ho paura però che questa soluzione mi comporti delle problematiche non indifferenti.

    Tu cosa mi consigli?

    Grazie tante per i suggerimenti e l'aiuto.

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da fbcyborg
    Ora il mio problema è questo: vorrei che il mio JOptionPane invece che un int restituisse proprio la data
    Ma non ti serve il valore di ritorno del JOptionPane!! (o perlomeno ti servirebbe solo per stabilire se l'utente ha accettato o annullato l'input). Tu il JCalendar ce l'hai .... e prendi quello che ti fornisce lui ... no?

    E se "incapsuli" il tutto in un metodo in una tua classe, nessuno ti vieterebbe di usarlo in un modo del tipo:

    Date d = MyCalendarOptionPane.showDialog(parente);
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Ecco un bel esempio:

    codice:
    import java.awt.*;
    import java.util.*;
    import javax.swing.*;
    import com.toedter.calendar.JCalendar;
    
    public class Prova {
        public static void main(String[] args) {
            Date d = JCalendarOptionPane.showDialog(null, "Scegli data");
    
            if (d != null) {
                System.out.println("La data selezionata è " + d);
            } else {
                System.out.println("Scelta annullata");
            }
        }
    }
    
    
    class JCalendarOptionPane {
        private JCalendarOptionPane() {}
    
        public static Date showDialog(Component parent, String title) {
            JCalendar cal = new JCalendar();
            int r = JOptionPane.showConfirmDialog(parent, cal, title, JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
    
            if (r == JOptionPane.OK_OPTION) {
                return cal.getDate();
            } else {
                return null;
            }
        }
    }
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Grazie di cuore veramente!
    Più semplice di così non poteva essere.

    Peccato che mi stessi arrampicando sugli specchi per fare questa cosa, ma per fortuna mi hai dato questo consiglio preziosissimo!

    Grazie davvero!

  8. #8
    Avevo bisogno di creare un JOptionPane contenente 2 combobox e a seconda dei valori selezionati deve succedere qualcosa.
    Ho utilizzato il sistema che mi hai spiegato qualche post fa e funziona tutto bene, però ho un problema:
    se l'utente sbaglia l'input, io lancio un altro JOptionPane, che dice "hai sbagliato la selezione". Alla pressione del bottone OK, viene chiuso sia il JOptionPane appena lanciato che quello "padre".
    Come si potrebbe fare per evitare che venga chiuso anche il parent?

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da fbcyborg
    se l'utente sbaglia l'input, io lancio un altro JOptionPane, che dice "hai sbagliato la selezione".
    Il lancio del secondo option pane lo fai a seguito di quale evento esattamente? Quando l'utente clicca su OK del primo option pane? Perché in quel caso il primo option pane sparisce subito.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  10. #10
    Eh, sì. Lo faccio a seguito dell'evento click su OK. Non vedo molte alternative. O almeno non mi vengono in mente.

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.