While I retrieve a date field from access database and show it in JTable, it is in yyyy-MM-dd format. I want it to be dd-MM-yyyy. Though I changed the format in MS Access, while it is shown in panel it is in yyyy-MM-dd only. How can I change it?
The date field is one of the many fields I retrieve with a query. So, I don’t understand where to put the SimpleDateFormatter and format it for each row. Kindly help me out. Thanks in advance.
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.util.Locale;
import javax.swing.*;
import javax.swing.table.*;
import java.util.Date;
import java.sql.*;
import java.sql.ResultSetMetaData;
import java.text.*;
public class gc implements ActionListener
{
JComboBox cc=new JComboBox();
JFrame frame=new JFrame();
JTable table;
DefaultTableModel model;
String query;
int i;
JPanel panel=new JPanel();
public gc()
{
frame.setTitle("Composition Check");
frame.setSize(500,500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
JPanel p1=new JPanel();
p1.setLayout(new FlowLayout());
//Locale locale = Locale.getDefault();
// System.out.println("Before setting, Locale is = " + locale);
//Locale.setDefault(Locale.English);
//System.out.println("Before setting, Locale is = " + locale);
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conn=DriverManager.getConnection("jdbc:odbc:vasantham","","");
Statement st=conn.createStatement();
ResultSet rs=st.executeQuery("select DISTINCT composition from try");
while(rs.next())
{
cc.addItem(rs.getString("composition"));
}
conn.close();
}
catch(Exception e)
{
System.out.println(e);
}
p1.add(cc);
cc.addActionListener(this);
frame.add(p1,BorderLayout.NORTH);
frame.setVisible(true);
}
public class MyTableModel extends DefaultTableModel
{
public Class getColumnClass(int col)
{
if (col == 3)
{
return java.util.Date.class;
}
}
}
public void addTable(String query)
{
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conn=DriverManager.getConnection("jdbc:odbc:vasantham","","");
Statement st=conn.createStatement();
System.out.println(query);
ResultSet rs=st.executeQuery(query);
ResultSetMetaData md=rs.getMetaData();
int cols=md.getColumnCount();
//table=new JTable();
model=new DefaultTableModel();
model.addColumn("Purpose");
model.addColumn("Name");
model.addColumn("Manu");
model.addColumn("Expiry");
model.addColumn("Stock");
model.addColumn("Cost");
model.addColumn("Supplier");
model.addColumn("Supplier Number");
model.addColumn("Rack");
table=new JTable(new MyTableModel());
String[] tabledata=new String[cols];
int i=0;
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
while(rs.next())
{
for(i=0;i<cols;i++)
{
//if(i==3)
//{
//System.out.println(rs.getObject(i+1).toString());
// tabledata[i]=formatter.format(rs.getObject(i+1).toString());
//}
tabledata[i]=rs.getObject(i+1).toString();
}
model.addRow(tabledata);
}
panel.removeAll();
JScrollPane scroll = new JScrollPane(table);
panel.setLayout(new BorderLayout());
panel.add(scroll,BorderLayout.CENTER);
frame.add(panel,BorderLayout.CENTER);
conn.close();
}
catch(Exception e)
{
System.out.println(e);
}
}
public void actionPerformed(ActionEvent evt)
{
String ac=(String)cc.getSelectedItem();
System.out.println(ac);
addTable("select * from try where composition='"+ac+"'");
frame.setVisible(true);
}
public static void main(String[] args)
{
new gc();
}
}
You need to customize the table model to tell the JTable that the column is holding values of type Date:
This will make the JTable use a renderer formatting the date with the format associated to the current locale. If you need another format, you need to associate another renderer to the column, which formats the date as you want to.