JTable+cell+java.SQL.Date -> Editing problem

I have Date fields in my DB.

I place them into my JTable.

I want to present Date to user like:dd.mm.YYYY ordd.-mm-YYYY

.

For SQL is: %d.%m.%Y or %d-%m-%Y

Default mask for Date in DB is: YYYY-mm-dd

I can't change it. It is already set.

When I use

DATE_FORMAT(date, "%d-%m-%Y") ;

in mySQL SELECT query, I get problems with parsing result.

I can't understand why, but sometimes I get NULL, and my Vector with results is not filled properly.

when I just take Date field and present it asString, I don't have any problems withdetecting NULL values and I overcome this sudden NULL.

That is why I decided to transform Date on client side.

But I have problems.

1. I have a problem DEFAULT value (0000-00-00)

If user did not fill Date field, it has value=0000-00-00

0000-00-00 becomes 30.11.0002 or something like that.

2. I can't edit cell with Date....

I give small example of my problem

1.I use vectors-they keep data from query

2.All other methods I have taken from my TableModel.

Maybe mistake is in this methods...or somewhere else.

Please, see my SSCE

import java.awt.*;

import java.util.Vector;

import javax.swing.*;

import javax.swing.event.*;

import javax.swing.table.*;

import java.sql.Date;

publicclass TableProcessingextends JFrameimplements TableModelListener

{

JTable table;

Vector tableRowVector;

Vector tableDataVector;

public TableProcessing()

{

Vector columnNamesVector =new Vector();//{"Family", "Birthday date", "Years"};

columnNamesVector.addElement("Person");

columnNamesVector.addElement("Birthday date");

columnNamesVector.addElement("Years");

tableDataVector=new Vector();

Vector tableRowVector =new Vector();

tableRowVector.addElement("John James");

tableRowVector.addElement(Date.valueOf("0000-00-00"));

tableRowVector.addElement("23");

tableDataVector.addElement(tableRowVector);

tableRowVector =new Vector();

tableRowVector.addElement("Tom Perkins");

tableRowVector.addElement(Date.valueOf("2006-12-12"));

tableRowVector.addElement("23");

tableDataVector.addElement(tableRowVector);

DefaultTableModel model =new DefaultTableModel(tableDataVector, columnNamesVector);

model.addTableModelListener(this );

table =new JTable( model )

{

public Class<?> getColumnClass(int columnIndex){

return getValueAt(0, columnIndex).getClass();

//return String.class;

//return super.getColumnClass(columnIndex);

}

public Object getValueAt(int row,int column){

return super.getValueAt(row, column);

}//getValueAt

// The Cost is not editable

publicboolean isCellEditable(int row,int column)

{

returntrue;

}

};//table

table.setPreferredScrollableViewportSize(table.getPreferredSize());

JScrollPane scrollPane =new JScrollPane( table );

getContentPane().add( scrollPane );

}//constructor

publicvoid tableChanged(TableModelEvent e)

{

System.out.println(e.getSource());

if (e.getType() == TableModelEvent.UPDATE){

int row = e.getFirstRow();

int column = e.getColumn();

}

}

publicstaticvoid main(String[] args)

{

TableProcessing frame =new TableProcessing();

frame.setDefaultCloseOperation( EXIT_ON_CLOSE );

frame.pack();

frame.setLocationRelativeTo(null );

frame.setVisible(true);

}

}

[6040 byte] By [Holoda] at [2007-11-26 21:42:29]
# 1

JTable does not have a special renderer for java.sql.Date, so it just uses toString to display the date.

You have 2 options:

1. use java.util.date, which has a default renderer.

2. write you own renderer and editor for java.sql.Date.

Read the tutorial:

http://java.sun.com/docs/books/tutorial/uiswing/components/table.html#editrender

Rodney_McKaya at 2007-7-10 3:28:38 > top of Java-index,Desktop,Core GUI APIs...
# 2

Hi, Rodney.

Thanks!

java.util.Date it seems to me is deprecated.

I'll try to use java.util.Calendar...

I have to compare Dates. Color of row in JTable depends on Date fields stored in it.

That is why I am trying to present Date field from DB as Date, not as String.

Following your advice:

1.I will get it as string

2. convert to dd-mm-YYYY (as sting)

Then I will parse again them or use Calendar

Holoda at 2007-7-10 3:28:38 > top of Java-index,Desktop,Core GUI APIs...
# 3
Use this to get a Date object:new SimpleDateFormat("yyyy-MM-dd").parse("2006-12-12")Read here about
Rodney_McKaya at 2007-7-10 3:28:38 > top of Java-index,Desktop,Core GUI APIs...