【求助,急,在线等】 如何让Data类型的变量在JTable表格中显示为XXXX-XX-XX格式?

program_man88 2012-06-07 09:13:01
现具体说下我这个软件中的内容:

1、
Access 是一个类,其中含有两个Date型的变量。这个类中有个 toArray的方法将各个成员变量转换成Object[]数组

public class Access {
int no;
String name;
int capboard;
Date start;
Date end;

public Object[] toArray()
{
Object[] vars = new Object[5];
vars[0] = this.no;
vars[1] = this.name;
vars[2] = this.capboard;
vars[3] = this.start;
vars[4] = this.end;
return vars;
}
2、我用ArrayList<Access> tbook2=new ArrayList<Access>(); 在内存中存放各个Access对象的实例


3、 我所有的记录信息是通过用 ObjectInputStream、ObjectOutputStream流 读写dat文件完成的。打开我的软件时,先从文件中读取,写入ArrayList<Access> tbook2。 关闭软件时,再将更新后的ArrayList<Access> tbook2 的 内容写入文件

private void readFromFile(String filename)
{
try
{
FileInputStream fin=new FileInputStream(filename); //文件字节输入流
ObjectInputStream objin=new ObjectInputStream(fin); //对象字节输入流
while (true) //输入流未结束时
try
{
tbook2.add((Access)objin.readObject());//读取一个对象添加到tbook2
}
catch (Exception e) //捕获ClassNotFoundException和EOFException异常
{
break;
}
objin.close(); //先关闭对象流
fin.close(); //再关闭文件流
}
catch (IOException ioe){} //指定文件不存在时,表格为空
}


public void windowClosing(WindowEvent e) //点击窗口关闭按钮时触发并执行
{

//将修改后的信息写入文件
try
{
FileOutputStream fout=new FileOutputStream(filename); //文件字节输出流
ObjectOutputStream objout=new ObjectOutputStream(fout); //对象字节输出流
if (!tbook2.isEmpty())
{
Iterator it = tbook2.iterator();
while (it.hasNext())
{
objout.writeObject((Access)it.next()); //写入一个对象
}
}
objout.close();
fout.close();
}
catch (IOException ioe){}
}


4、我输入一条 Access信息,是在我写的一个图形化界面中,里面有文本框。然后这样给ArrayList<Access> tbook2 添加一条记录

Access temp=new Access(Integer.parseInt(no.getText()),name.getText(),Integer.parseInt(capboard.getText()),new SimpleDateFormat("yyyy-MM-dd").parse(start.getText()),new SimpleDateFormat("yyyy-MM-dd").parse(end.getText()));
tbook2.add(temp);
JOptionPane.showMessageDialog(this,"成功插入此条记录!");

5、每当我打开文件,从文件读取信息到ArrayList<Access> tbook2 之后,我将ArrayList<Access> tbook2 中的内容,显示到表格中

表格是这样定义的


private JTable table; //表格组件
private DefaultTableModel tableModel; //默认表格模型
private String[] columns={"桌号","姓名","橱柜号","预约开始时间","预约结束时间"}; //表格各列的中文标题
this.tableModel=new DefaultTableModel(columns,0); //默认表格模型,指定列标题,0行
this.table=new JTable(tableModel); //创建空表格,有列标题

将ArrayList<Access> tbook2 中的内容,显示到表格中 的语句是这么写的


Iterator it = tbook2.iterator();
while (it.hasNext())
{
Access access = (Access)it.next();
this.tableModel.addRow(access.toArray() ); //表格添加一行,参数数组指定各列值
}

——————————————————————————————————————————————————————

到这里,出现问题了。表格中显示的Date那两个变量,显示的是 Sun Jan 01 00:00:00 CST 2012 这样的格式

我希望显示的是 2012-01-01 这样的格式

不知如何在仍旧使用Date型,而不是将日期转换成String,甚至将年月日单独分成3个int型存储的基础上,以最小的修改代价实现
...全文
258 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
program_man88 2012-06-08
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]
终于写出来了

Java code

import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;
import java.util.*;
import java.text.*;

public class DateTableFrame extends JFrame
{
private String[] co……
[/Quote]

非常感谢您
program_man88 2012-06-08
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

正常都是这么用的,就是把date 格式化fromat后可以转换成任何你想要的字符形式。



引用 5 楼 的回复:

1、要在表格上显示为String类型就把toArray方法改一下。
Java code
public Object[] toArray() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd")……
[/Quote]

请具体给几行代码吧,谢谢
周靖峰 2012-06-08
  • 打赏
  • 举报
回复
终于写出来了


import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;
import java.util.*;
import java.text.*;

public class DateTableFrame extends JFrame
{
private String[] columnNames = new String[] {"序号", "时间"};
private DefaultTableModel model;
private JTable table;

public DateTableFrame()
{
model = new DefaultTableModel(columnNames, 0);
model.addRow(new Object[] {1, new Date()});
table = new JTable(model);

TableColumn dateColumn = table.getColumn("时间");
dateColumn.setCellEditor(new DateTableCellEditor());
dateColumn.setCellRenderer(new DateTableCellRenderer());

add(new JScrollPane(table));
}

public static void main(String[] args)
{
JFrame frame = new DateTableFrame();
frame.pack();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}

class DateTableCellEditor extends AbstractCellEditor implements TableCellEditor
{
private JTextField tfDate = new JTextField();
private Date date;

public Object getCellEditorValue()
{
return date;
}

public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column)
{
Date date = (Date) value;
this.date = date;
tfDate.setText(new SimpleDateFormat("yyyy-MM-dd").format(date));
return tfDate;
}
}

class DateTableCellRenderer extends JLabel implements TableCellRenderer
{
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
Date date = (Date) value;
this.setText(new SimpleDateFormat("yyyy-MM-dd").format(date));
return this;
}
}
jlu_lamp_lamp 2012-06-08
  • 打赏
  • 举报
回复
要重写渲染器
我以前就是这样做
周靖峰 2012-06-08
  • 打赏
  • 举报
回复
是可以办到的,不过比较麻烦,要自已定义一个TableCellRenderer和TableCellEditor
张自强 2012-06-08
  • 打赏
  • 举报
回复
正常都是这么用的,就是把date 格式化fromat后可以转换成任何你想要的字符形式。



[Quote=引用 5 楼 的回复:]

1、要在表格上显示为String类型就把toArray方法改一下。
Java code
public Object[] toArray() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Object[] vars = new Object[5];
vars[0] = t……
[/Quote]
program_man88 2012-06-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

1、要在表格上显示为String类型就把toArray方法改一下。
Java code
public Object[] toArray() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Object[] vars = new Object[5];
vars[0] = t……
[/Quote]

多谢啦。但继续求助,看看有木有表格控件有把Date型显示成String的方法了
brightyq 2012-06-07
  • 打赏
  • 举报
回复
1、要在表格上显示为String类型就把toArray方法改一下。
public Object[] toArray() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Object[] vars = new Object[5];
vars[0] = this.no;
vars[1] = this.name;
vars[2] = this.capboard;
vars[3] = sdf.format(this.start);
vars[4] = sdf.format(this.end);
return vars;
}


2、写文件时,也没看你那个tbook2是怎么来的
构建tbook2时,用个构造方法吧。
public Access(int no,String name,int capboard,String start,String end){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
this.no = no;
this.name = name;
this.capboard = capboard;
this.start = sdf.parse(start);
this.end = sdf.parse(end);
}


估且这么用吧,呵呵。也许那个表格控件有把Date型显示成String的方法呢,不知道哦,我不画图型的。
program_man88 2012-06-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

就改成显示String也没多麻烦吧,要Date显示为这样好像不可以吧?

java.sql.Date倒是可以这样:
写个小例子。

import java.util.Date;

public class DateTest {
public static void main(String[] args){
Date date = new Date();
java.sql.Da……
[/Quote]


这样貌似不行呀。

我其中有

new SimpleDateFormat("yyyy-MM-dd").parse(start.getText())

这样返回的是Date。没法弄成java.sql.Date
program_man88 2012-06-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

就改成显示String也没多麻烦吧,要Date显示为这样好像不可以吧?

java.sql.Date倒是可以这样:
写个小例子。

import java.util.Date;

public class DateTest {
public static void main(String[] args){
Date date = new Date();
java.sql.Da……
[/Quote]

如果只是改成显示string,但仍旧用date写文件读文件也行呀。不知具体怎么弄的?请再指点下
brightyq 2012-06-07
  • 打赏
  • 举报
回复
就改成显示String也没多麻烦吧,要Date显示为这样好像不可以吧?

java.sql.Date倒是可以这样:
写个小例子。

import java.util.Date;

public class DateTest {
public static void main(String[] args){
Date date = new Date();
java.sql.Date d = new java.sql.Date(date.getTime());
System.out.println(d);
}
}
program_man88 2012-06-07
  • 打赏
  • 举报
回复
强调下,必须继续使用Date,或者最多换成Calendar。因为软件都写到这份上了,再改的话,无异于重写了

62,625

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧