0

I have read some questions here, but still I don't understand how to "trim" the date, that JTable cell(column) will have only date without time. Now I have date and time in cell, but in DB stred only date, thats why I have everywhere 2013-04-02 00:00:00.0, but i want 02-04-2013

try {
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        String Base = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)}; DBQ=SL2.mdb";
        con = DriverManager.getConnection(Base,"","");
        st = con.createStatement();
        res2 = st.executeQuery("SELECT * FROM Apmeklejumi");
        rsmd = res2.getMetaData();
        int column = rsmd.getColumnCount();
        columnNames.addElement("ID");
        columnNames.addElement("Iestašanas datums");
        columnNames.addElement("Sūdzības");
        columnNames.addElement("Diagnoze");
        columnNames.addElement("Rekomendācijas");
        columnNames.addElement("Pacienta ID");
        while(res2.next()) {
            Vector row = new Vector(column);
            row.addElement(res2.getObject("ID"));               
            row.addElement(res2.getObject("Ies_dat")); // <--- date
            row.addElement(res2.getObject("Sudz"));
            row.addElement(res2.getObject("Diag"));
            row.addElement(res2.getObject("Rekom"));
            row.addElement(res2.getObject("Pacienta_ID"));              
            data.addElement(row);
        }
        st.close();
        con.close();
    } catch(Exception e) {
        e.printStackTrace();
    }
mKorbel
  • 109,525
  • 20
  • 134
  • 319
usr999
  • 157
  • 2
  • 7
  • 20

2 Answers2

4

for example

private static class DateRenderer extends DefaultTableCellRenderer {

    private static final long serialVersionUID = 1L;

    @Override
    public Component getTableCellRendererComponent(JTable table, Object value, 
             boolean isSelected, boolean hasFocus, int row, int column) {
        super.getTableCellRendererComponent(table, value, isSelected, 
             hasFocus, row, column);
        if (!(value instanceof Date)) {
            return this;
        }
        setText(DATE_FORMAT.format((Date) value));
        return this;
    }
}

EDIT

enter image description here

import java.awt.GridLayout;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumnModel;
import javax.swing.table.TableModel;

public class SimpleTableDemo extends JPanel {

    private static final long serialVersionUID = 1L;
    private boolean DEBUG = false;
    private JTable table;
    private JButton okButton;
    private String[] columnNames = {"First Name", "Last Name", "Sport", "# of Years", "Vegetarian", "Date"};
    private Object[][] data = {{"Kathy", "Smith", "Snowboarding", new Integer(5), (false), new Date()},
        {"John", "Doe", "Rowing", new Integer(3), (true), new Date()},
        {"Sue", "Black", "Knitting", new Integer(2), (false), null},
        {"Jane", "White", "Speed reading", new Integer(20), (true), new Date()},
        {"Joe", "Brown", "Pool", new Integer(10), (false), new Date()},};
    private TableModel model = new DefaultTableModel(data, columnNames) {
        private static final long serialVersionUID = 1L;

        @Override
        public Class<?> getColumnClass(int column) {
            return getValueAt(0, column).getClass();
        }
    };

    public SimpleTableDemo() {
        super(new GridLayout(1, 0));
        table = new JTable(model);
        table.setRowHeight(20);
        table.setPreferredScrollableViewportSize(table.getPreferredSize());
        table.setFillsViewportHeight(true);
        TableColumnModel m = table.getColumnModel();
        m.getColumn(5).setCellRenderer(new SubstDateRenderer());
        JScrollPane scrollPane = new JScrollPane(table);
        add(scrollPane);
    }

    private static void createAndShowGUI() {
        JFrame frame = new JFrame("SimpleTableDemo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        SimpleTableDemo newContentPane = new SimpleTableDemo();
        newContentPane.setOpaque(true); // content panes must be opaque
        frame.setContentPane(newContentPane);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                createAndShowGUI();
            }
        });
    }

    class SubstDateRenderer extends DefaultTableCellRenderer {

        private static final long serialVersionUID = 1L;
        private Date dateValue;
        private SimpleDateFormat sdfNewValue = new SimpleDateFormat("dd.MMMM.yyyy");
        private String sdfNewValueString = "";

        public SubstDateRenderer() {// formating TableCell
            super();
            setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        }

        @Override
        public void setValue(Object value) {
            if ((value != null) && (value instanceof Date)) {
                dateValue = (Date) value;
                sdfNewValueString = sdfNewValue.format(dateValue);
                value = sdfNewValueString;
            }
            super.setValue(value);
        }
    }
}
mKorbel
  • 109,525
  • 20
  • 134
  • 319
  • 1
    Also look for a newer driver. – trashgod Apr 04 '13 at 21:55
  • 1
    +1, for a custom renderer. You may find overriding the `setValue()` method of the default renderer easier. – camickr Apr 04 '13 at 23:32
  • [aaaaach will k*** you :-)](http://stackoverflow.com/a/6517504/714968), and to use (don't forget to upvote and accept as correct answert) code posted by @camickr, I'd to suggest (inside his code) to create, insert a new own void with various, proper formatting, then you'll covering all possible formating in JTable – mKorbel Apr 05 '13 at 07:45
  • I don't understang anything you are saying. – usr999 Apr 05 '13 at 08:25
  • is too hard to use high level abstraction (Renderer) without basic knowledge about programming language, please to click to the tablecellrenderer tag bellow your question, there are bunch of working code, don't forget never hands up, never give up – mKorbel Apr 05 '13 at 08:29
  • I tried adding new class, but still it doesn't show the date, also see the time: `class DateRenderer extends DefaultTableCellRenderer { private java.util.Date dateValue; private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); public void setValue(Object value) { if((value != null)) { String stringFormat = value.toString(); try { dateValue = new SimpleDateFormat("yyyy-MM-dd").parse(stringFormat); } catch(ParseException e) { e.printStackTrace(); } valueToString = sdf.format(dateValue); super.setValue(value); } } }` – usr999 Apr 05 '13 at 08:51
  • I know that, 0 = ID, 1 is my date – usr999 Apr 05 '13 at 09:01
  • lunch time sorry, you have to wait :-) – mKorbel Apr 05 '13 at 09:09
  • @camickr please do you meaning like this one (please see my edit) – mKorbel Apr 05 '13 at 12:23
  • 1
    @mKorbel, sure something like that. I actually got the idea from the [Using a Custom Renderer](http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#renderer) section of How to Use Tables in the Swing tutorial. – camickr Apr 05 '13 at 15:41
2

See Table Format Renderers. A simple example is given for just displaying the date.

Edit:

For example you could use:

SimpleDateFormat format = new SimpleDateFormat("yy/MM/dd");
TableCellRenderer renderer = new FormatRenderer( format );
TableColumnModel tcm = table.getColumnModel();
tcm.getColumn(???).setCellRenderer(renderer);

From the link I gave you above don't forget to follow the links in the "Related Reading" section.

camickr
  • 321,443
  • 19
  • 166
  • 288
  • I don't understand how to add it to my code, I have a class **public class Updater implements ListSelectionListener** , I'm trying what you sugested, but it doesn't seems to work. – usr999 Apr 05 '13 at 07:37
  • @doctor_, this has nothing to do with a ListSelectionListener. See edit. – camickr Apr 05 '13 at 15:47
  • @doctor_, did you import the class? – camickr Apr 05 '13 at 19:49