我有一个充满mySQL数据库的JTable。 其中一列用mySQL格式填充日期(yyyy / MM / dd) 我使用单元格渲染器将te列上的日期显示为(dd / MM / yyyy)此类:
static class DateRenderer extends DefaultTableCellRenderer {
private Date dateValue;
private SimpleDateFormat sdfNewValue = new SimpleDateFormat("dd-MM-yyyy");
private String valueToString = "";
@Override
public void setValue(Object value) {
if ((value != null)) {
String stringFormat = value.toString();
try {
dateValue = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH).parse(stringFormat);
} catch (ParseException e) {
e.printStackTrace();
}
valueToString = sdfNewValue.format(dateValue);
value = valueToString;
setHorizontalAlignment( SwingConstants.CENTER );
}
super.setValue(value);
}
}
我已经使用
将它设置到JTable上的正确列table.getColumnModel()。getColumn(3).setCellRenderer(new DateRenderer());
我遇到的问题是单元格是可编辑的,一旦我双击该列中的单元格,日期再次显示为(yyyy / MM / dd)。
我尝试使用自定义类来使用此代码
显示单元格编辑class MyEditor extends DefaultCellEditor {
public MyEditor() {
super(new JTextField());
}
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected,
int row, int column) {
JTextField editor = (JTextField) super.getTableCellEditorComponent(table, value, isSelected,
row, column);
editor.setFont(font);
String ndate=new String();
if (dataModel.getColumnName(3)=="date" && column==3) {
String s=(String) dataModel.getValueAt(row, column);
SimpleDateFormat originalFormat = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat targetFormat = new SimpleDateFormat("dd-MM-yyyy");
try {
Date odate = originalFormat.parse(s);
ndate=(targetFormat.format(odate));
} catch (ParseException ex) {
}
value=ndate;
}
if (value != null) {
editor.setText(value.toString());
editor.setHorizontalAlignment(SwingConstants.CENTER);
}
return editor;
}
}
它工作得很完美,但我无法解决的唯一问题是在JTable上更改单元格时mySQL数据库正在更新,而mySQL没有以dd / mm / yyyy格式接收日期,所以我正在寻找一种方法编辑完成后,它会将日期传回日期为myy可接受的yyyy / mm / dd。
任何人都可以帮我解决这个问题吗?
问候。