PDA

View Full Version : [JAVA] JCalendar in un JDialog e restituzione data su click


fbcyborg
16-03-2010, 18:35
Salve a tutti,

sto cercando di realizzare, tramite l'utilizzo della classe JCalendar di toedter.com (http://www.toedter.com/en/jcalendar/index.html), un sistema in cui premendo un bottone compaia un JDialog con all'interno un JCalendar. Fin qui non ci sono problemi ovviamente, ma quello che vorrei fare è la seguente cosa: al click dell'utente su un giorno il JDialog dovrebbe chiudersi e dovrebbe restituire al chiamante la data selezionata. Un po' come funziona la logica del JOptionPane, che alla pressione del tasto YES o NO (ad esempio) restituisce 1 o 0.

Come posso fare?
Anche leggendo la documentazione non riesco a trovare un modo per realizzare questo meccanismo. Inoltre la cosa dovrebbe essere bloccante, ovvero:
Al clik su un JButton, dovrebbe partire questo JDialog,
e solo alla chiusura dovrebbe procedere con i passi successivi. Esattamente come si comporta il JOptionPane.

banryu79
17-03-2010, 09:37
Per rendere la cosa bloccante basta che crei una JDialog modale, con la modalità di default, usando uno dei costruttori che accettano, tra gli altri, un parametro booleano.

Se invece vuoi specificare una modalità diversa da quella di default [Application Modal, mi pare] devi utilizzare uno dei due costruttori che accettano come terzo parametro una enum Dialog.ModalityType.

Se non ho capito male, la dialog che mostri, modale, contiene solamente il JCalendar, allo scopo di forzare l'utente a scegliere una data per poter chiudere la dialog.
Se questo è lo scopo, un accorgimento che potresti usare è quello di impedire all'utente di chiudere la dialog semplicemente premendo il pulsante[x] che compare sulla barra del titolo (impostando con il metodo setDefaultCloseOperation la proprietà defaultCloseOperation a JDialog.DO_NOTHING_ON_CLOSE) e chiudendo programmaticamente la dialog con una chiamata (setVisible(false)) al momento opportuno.

Il momento opportuno è quando l'utente ha scelto una data: non conosco JCalendar, ma se hai documentazione e sorgenti prova a vedere se esso emette un evento in corrispondenza del setting della data corrente e in tal caso potresti registrare un listener adatto e gestire la chiusura della dialog.

fbcyborg
17-03-2010, 10:27
Guarda ho risolto con JOptionPane.
Se gli passo come "message" che è di tipo Object, il mio JCalendar, posso fare tutto questo senza scomodare il JDialog! :)

Grazie!

banryu79
17-03-2010, 12:33
Guarda ho risolto con JOptionPane.
Se gli passo come "message" che è di tipo Object, il mio JCalendar, posso fare tutto questo senza scomodare il JDialog! :)

Ah, bene :)