不希望时间在JTable上

 书友80922185 发布于 2023-02-06 16:51

当我从数据库中获取数据时,它会将其显示Date04/01/2014 00:00:00并显示在数据库中JTable.

现在我想在桌子上只显示日期并丢弃时间.

我该怎么做?

编辑:

public Vector getDateCustomer(String name,String name1)throws Exception
{
Vector> getdatecustomerVector = new Vector>();

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 getdatecustomer = new Vector();
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;
}

这就是我从数据库中获取值的方式.

得到错误

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.(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)

MadProgramme.. 5

基于原始问题

你可以做两件事.

    确保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;
    }

}

请查看如何使用表格,特别是使用自定义渲染器以获取更多详细信息

应用此渲染器的最佳方法可能是将其设置为特定类类型的默认渲染,java.util.Date或者如果您知道它是java.sql.Date.

table.setDefaultCellRenderer(Date.class, new DateTableCellRenderer());

这将假设TableModel's getColumnClass为列返回正确的类类型.如果没有,那么您需要直接将渲染器设置为特定列...

table.getColumnModel().getColumn(indexOfDateColumn).setCellRenderer(new DateTableCellRenderer());

就个人而言,我更喜欢第二种选择...

基于更新的问题

不要更改来自数据库的数据类型,这些数据类型很重要,您实际上可能希望以某种超出其功能的方式与它们进行交互String.

模型的目的是表示数据,模型不应该关注数据呈现的格式,事实上,您可以越多地保持数据的原始格式越好.

该视图负责决定如何表示数据,在这种情况下,这是该角色的作用 TableCellRenderer

1 个回答
  • 基于原始问题

    你可以做两件事.

      确保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;
        }
    
    }
    

    请查看如何使用表格,特别是使用自定义渲染器以获取更多详细信息

    应用此渲染器的最佳方法可能是将其设置为特定类类型的默认渲染,java.util.Date或者如果您知道它是java.sql.Date.

    table.setDefaultCellRenderer(Date.class, new DateTableCellRenderer());
    

    这将假设TableModel's getColumnClass为列返回正确的类类型.如果没有,那么您需要直接将渲染器设置为特定列...

    table.getColumnModel().getColumn(indexOfDateColumn).setCellRenderer(new DateTableCellRenderer());
    

    就个人而言,我更喜欢第二种选择...

    基于更新的问题

    不要更改来自数据库的数据类型,这些数据类型很重要,您实际上可能希望以某种超出其功能的方式与它们进行交互String.

    模型的目的是表示数据,模型不应该关注数据呈现的格式,事实上,您可以越多地保持数据的原始格式越好.

    该视图负责决定如何表示数据,在这种情况下,这是该角色的作用 TableCellRenderer

    2023-02-06 16:54 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有