Java - Guardar fecha vacía con JCalendar

 
Vista:
sin imagen de perfil

Guardar fecha vacía con JCalendar

Publicado por Roberto (1 intervención) el 23/03/2014 16:35:40
¡Hola!
Estoy haciendo una aplicación sencilla usando JCalendar que lo descargué de http://toedter.com/jcalendar/.
Tengo un componente JDateChooser que me permite elegir una fecha y un botón Aceptar. Cuando se presiona Aceptar debería suceder esto:
Si se eligió una fecha, entonces se guarda en una base de datos PostgreSQL.
Si no se ingresó fecha, entonces se guarda la fecha 00/00/00 en la base de datos.
Adjunto una imagen de mi programita.

Pero si no ingreso una fecha, Eclipse me da un error en tiempo de ejecución:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at java.util.Calendar.setTime(Calendar.java:1106)
at java.text.SimpleDateFormat.format(SimpleDateFormat.java:955)
at java.text.SimpleDateFormat.format(SimpleDateFormat.java:948)
at java.text.DateFormat.format(DateFormat.java:336)
at vista.FormFecha.actionPerformed(FormFecha.java:70)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3312)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:708)
at java.awt.EventQueue$4.run(EventQueue.java:706)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)


¿A alguien se le ocurre otra forma de solucionar mi problema? Estuve leyendo, pero no encuentro nadie que tenga que hacer esto. Aunque es sencillo, me está costando varios días encontrar una solución.
Aquí pego el código por si sirve de ayuda:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package vista;
 
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.DateFormat;
 
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLayeredPane;
import com.toedter.calendar.JDateChooser;
import javax.swing.JButton;
 
public class FormFecha extends JFrame implements ActionListener {
 
	DateFormat df = DateFormat.getDateInstance();
 
	private JPanel _contentPane;
	private JButton _btnAceptar;
	private JDateChooser _dateChooser;
 
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					FormFecha frame = new FormFecha();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}
 
	public FormFecha() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		_contentPane = new JPanel();
		_contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		_contentPane.setLayout(new BorderLayout(0, 0));
		setContentPane(_contentPane);
 
		JLayeredPane layeredPane = new JLayeredPane();
		_contentPane.add(layeredPane, BorderLayout.CENTER);
 
		_dateChooser = new JDateChooser();
		_dateChooser.setBounds(124, 12, 157, 19);
		layeredPane.add(_dateChooser);
 
		_btnAceptar = new JButton("Aceptar");
		_btnAceptar.setBounds(146, 93, 117, 25);
		_btnAceptar.addActionListener(this);
		layeredPane.add(_btnAceptar);
	}
 
	@Override
	public void actionPerformed(ActionEvent e) {
		if (e.getSource() == _btnAceptar) {
 
			String fechaObtenida = df.format(_dateChooser.getDate());
			System.out.println("Fecha: " + fechaObtenida);
		}
	}
}

Saludos,
Roby
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Jhonnathan Emilio Cardona Saineda

Guardar fecha vacía con JCalendar

Publicado por Jhonnathan Emilio Cardona Saineda (328 intervenciones) el 24/03/2014 06:43:34
Hola,
Hace mucho tiempo hice algo con este mismo componente y esto lo supe manejar dándole yo mismo una fecha inicial. Osea en el momento cuando tu inicializas el componente, le das tamaño y lo adicionas al contenedor, ahí mismo puedes darle una fecha inicial la cual puede ser la fecha actual. dateChooser.setDate(new Date());. Espero te sirva. Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar