当我从数据库中获取数据时,它会将其显示Date为04/01/2014 00:00:00并显示在数据库中JTable.
现在我想在桌子上只显示日期并丢弃时间.
我该怎么做?
编辑:
public Vector getDateCustomer(String name,String name1)throws Exception
{
Vector<Vector<String>> getdatecustomerVector = new Vector<Vector<String>>();
Connection conn = dbConnection();
pre1=conn.prepareStatement("select * from Debit where Date "
+ "between CDate(?) and CDate(?) order by Date ASC");
pre1.setString(1, name); // bind param 1
pre1.setString(2, name1); // bind param 2
ResultSet rs1 = pre1.executeQuery();
while(rs1.next())
{
Vector<String> getdatecustomer = new Vector<String>();
getdatecustomer.add(rs1.getString(1));
getdatecustomer.add(rs1.getString(2));
getdatecustomer.add(rs1.getString(3));
getdatecustomer.add(rs1.getString(4));
Date myDate=(Date)format.parse(rs1.getString(5).substring(0, 10));
getdatecustomer.add(format.format(myDate));
getdatecustomer.add(rs1.getString(6));
getdatecustomerVector.add(getdatecustomer);
}
/*Close the connection after use (MUST)*/
if(conn!=null)
conn.close();
return getdatecustomerVector;
}
Run Code Online (Sandbox Code Playgroud)
这就是我从数据库中获取值的方式.
得到错误
java.text.ParseException: Unparseable date: "2014-01-01"
at java.text.DateFormat.parse(DateFormat.java:357)
at shop.DBEngine.getDateCustomer(DBEngine.java:548)
at shop.DCSTable.<init>(DCSTable.java:127)
at shop.DCS.actionPerformed(DCS.java:273)
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:3321)
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:2713)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707)
at java.awt.EventQueue.access$000(EventQueue.java:101)
at java.awt.EventQueue$3.run(EventQueue.java:666)
at java.awt.EventQueue$3.run(EventQueue.java:664)
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:680)
at java.awt.EventQueue$4.run(EventQueue.java:678)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:677)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
Run Code Online (Sandbox Code Playgroud)
基于原始问题
你可以做两件事.
Date.class为给定列返回表模型.该默认行为JTable是获取对象toString结果并在单元格中显示它.例如
public class DateTableCellRenderer extends DefaultTableCellRenderer {
protected static final DateFormat DATE_FORMAT = new SimpleDateFormat("dd/MM/yyyy");
private DateFormat format;
public DateTableCellRenderer() {
this(DATE_FORMAT);
}
public DateTableCellRenderer(DateFormat format) {
this.format = format;
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
if (value instanceof Date) {
value = format.format((Date)value);
}
super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
return this;
}
}
Run Code Online (Sandbox Code Playgroud)
请查看如何使用表格,特别是使用自定义渲染器以获取更多详细信息
应用此渲染器的最佳方法可能是将其设置为特定类类型的默认渲染,java.util.Date或者如果您知道它是java.sql.Date.
table.setDefaultCellRenderer(Date.class, new DateTableCellRenderer());
Run Code Online (Sandbox Code Playgroud)
这将假设TableModel's getColumnClass为列返回正确的类类型.如果没有,那么您需要直接将渲染器设置为特定列...
table.getColumnModel().getColumn(indexOfDateColumn).setCellRenderer(new DateTableCellRenderer());
Run Code Online (Sandbox Code Playgroud)
就个人而言,我更喜欢第二种选择...
基于更新的问题
不要更改来自数据库的数据类型,这些数据类型很重要,您实际上可能希望以某种超出其功能的方式与它们进行交互String.
模型的目的是表示数据,模型不应该关注数据呈现的格式,事实上,您可以越多地保持数据的原始格式越好.
该视图负责决定如何表示数据,在这种情况下,这是该角色的作用 TableCellRenderer
| 归档时间: |
|
| 查看次数: |
233 次 |
| 最近记录: |