Foro de elhacker.net

Programación => Java => Mensaje iniciado por: robysottini en 23 Marzo 2014, 16:33 pm



Título: Guardar campo vacío con JCalendar
Publicado por: robysottini en 23 Marzo 2014, 16:33 pm
¡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.

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:


Código:
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


Título: Re: Guardar campo vacío con JCalendar
Publicado por: Mitsu en 23 Marzo 2014, 16:52 pm
Tienes que formatear la fecha al formato dd/MM/yyyy con format de la clase String.

Código
  1. java.util.Date fechaElegida = _datechooser.getDate();
  2.  
  3. if(fechaElegida != null) {
  4. String fechaString = String.format("%1$td-%1$tm-%1$tY", fechaElegida);
  5. // lo insertas en la tabla
  6. }
  7. else {
  8. // insertas tu fecha "00/00/00
  9. }