Toh!!!Ciao
codice:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.text.DateFormat;
import com.toedter.calendar.JCalendar;
//ovviamente devi includere il jar JCalendar.jar nel claspath altrimenti
//nulla funzionerà.
public class ProvaFrame extends JFrame implements ActionListener,PropertyChangeListener
{
private ProvaFrame mainFrame;
private JDialog myDialog;
private JButton showButt;
private JCalendar calendarPanel ;
private Calendar calendar;
private JTextField dateField;
public ProvaFrame()
{
//crea il box di testo che conterrà la data scela
dateField = new JTextField(10);
//aggiunge il box al frame
getContentPane().add(dateField);
//crea un GregorianCalendar (che non è un JCalendar)
calendar = Calendar.getInstance();
//crea il bottone che mostra il calendario
showButt = new JButton("mostra calendario");
//imposrta il layout del content pane a flowlayout
getContentPane().setLayout(new FlowLayout());
//aggiunge il bottone al frame
getContentPane().add(showButt);
//associa il frame comne ascoltatore di eventi del bottone
showButt.addActionListener(this);
//crea un dialogo modale (terzo paramentro = true) con
//finestra genitore = il frame dell'applicazione e titolo "Scegli la data"
myDialog = new JDialog(this,"Scegli la data",true);
//il dialogo viene mostrato centrato rispetto al frame
myDialog.setLocationRelativeTo(this);
//impostazione del layout del dialogo
myDialog.getContentPane().setLayout(new BorderLayout());
//creazine del calendario
calendarPanel = new JCalendar();
//associa il frame comne ascoltatore di "eventi"
//(o meglio di modifiche delle properties) del calendario
calendarPanel.addPropertyChangeListener(this);
//aggiunta del calendario al dialogo
myDialog.getContentPane().add(calendarPanel, BorderLayout.CENTER);
//compatta il dialogo in base alla dimensione dei pulsanti del calendario
myDialog.pack();
}
public static void main(String [] args)
{
//crea il frame dell'applicazione
ProvaFrame frame = new ProvaFrame();
final int iInset = 50;
//imposta le dimensioni della finestra in base allo schermo
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
frame.setBounds ( iInset, iInset, screenSize.width - iInset*2,
screenSize.height - iInset*2 );
//mostra il frame dell'applicazione
frame.setVisible(true);
}
//mostra il dialogo contenente il calendario
//in seguito alla pressione del bottone
public void actionPerformed(ActionEvent e)
{
myDialog.setVisible(true);
}
public void propertyChange(PropertyChangeEvent evt)
{
//ser il calendario è stato istanziato
if (calendarPanel != null)
{
if (evt.getPropertyName().equals("calendar"))
{
//ottiene un riferimento all'oggetto sorgente dell'evento
//cioè il Calendar (inteso come componente fornito dalla JDK
//non come JCalendar,che è il nostro bean) gestito dal bean
calendar = (Calendar) evt.getNewValue();
//oggetto formattatore della data secondo il locale corrente
//(cioè ti scrive i giorni in italiano)
DateFormat df = DateFormat.getDateInstance(DateFormat.LONG,
calendarPanel.getLocale());
//formattazione del valore secondo il formato precedentemente accennato
String date = df.format(calendar.getTime());
//imposta il ox di testo con il nuovo valore
dateField.setText(date);
}
}
}
}