Bom dia!
Estou utilizando o ObjectTableModel do Markyameba: http://markyameba.wordpress.com/2009/05/29/objecttablemodel/. Creio que muitos aqui devem conhecer essa classe.
No entanto, estou tendo problemas com o Formatter.
No banco de dados SQLITE tenho 5 campos DATETIME.
Quero exibir esses dados em uma JTable onde 4 (das 5 colunas correspondentes aos campos) devem ser exibidas como horas (formato HH:mm).
Mas está ocorrendo erro na formatação (mesmo sem existir campos de tipos diferentes do que DATETIME):
Código dos atributos da classe com as anotações:
@Resolvable(colName = "Dia")
private Date dia;
@Resolvable(formatter = HorarioFormatter.class, colName = "entrada")
private Date entrada;
Código do formatter:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import mark.utils.bean.Formatter;
import java.util.Date;
/**
*
* @author diego.queres
*/
public class HorarioFormatter implements Formatter {
private final static SimpleDateFormat formatter = new SimpleDateFormat("HH:mm");
@Override
public String format(Object obj) {
if (obj == null || !(obj instanceof java.util.Date)) {
return "";
} else {
return formatter.format(obj);
}
}
@Override
public String getName() {
return "horário";
}
@Override
public Object parse(Object s) {
Date horario = null;
try {
horario = formatter.parse(s.toString());
} catch (ParseException e) {
e.printStackTrace();
}
return horario;
}
}
Pilha de erro:
Exception occurred during event dispatching:
java.lang.IllegalArgumentException: Cannot format given Object as a Date
at java.text.DateFormat.format(DateFormat.java:281)
at java.text.Format.format(Format.java:140)
at javax.swing.JTable$DateRenderer.setValue(JTable.java:5364)
at javax.swing.table.DefaultTableCellRenderer.getTableCellRendererComponent(DefaultTableCellRenderer.java:237)
at javax.swing.JTable.prepareRenderer(JTable.java:5720)
at javax.swing.plaf.basic.BasicTableUI.paintCell(BasicTableUI.java:2072)
at javax.swing.plaf.basic.BasicTableUI.paintCells(BasicTableUI.java:1974)
at javax.swing.plaf.basic.BasicTableUI.paint(BasicTableUI.java:1770)
at javax.swing.plaf.ComponentUI.update(ComponentUI.java:143)
at javax.swing.JComponent.paintComponent(JComponent.java:752)
at javax.swing.JComponent.paint(JComponent.java:1029)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5124)
at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1479)
at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1410)
at javax.swing.RepaintManager.paint(RepaintManager.java:1224)
at javax.swing.JComponent._paintImmediately(JComponent.java:5072)
at javax.swing.JComponent.paintImmediately(JComponent.java:4882)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:785)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:713)
at javax.swing.RepaintManager.seqPaintDirtyRegions(RepaintManager.java:693)
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:125)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:178)
at java.awt.Dialog$1.run(Dialog.java:1046)
at java.awt.Dialog$3.run(Dialog.java:1098)
at java.security.AccessController.doPrivileged(Native Method)
at java.awt.Dialog.show(Dialog.java:1096)
at java.awt.Component.show(Component.java:1563)
at java.awt.Component.setVisible(Component.java:1515)
at java.awt.Window.setVisible(Window.java:842)
at java.awt.Dialog.setVisible(Dialog.java:986)
at ponto.JFramePrincipal$3.run(JFramePrincipal.java:147)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
CONSTRUÍDO COM SUCESSO (tempo total: 5 segundos)