gpt4 book ai didi

java - JTable 中 util.Date 的日期编辑器

转载 作者:行者123 更新时间:2023-12-01 22:40:52 26 4
gpt4 key购买 nike

我想创建一个 CRUD 应用程序,但我的问题是我不知道如何为 JTable 编写 DateEditor。

我不知道如何实现日期编辑器。格式应为“dd.mm.yyyy”。

希望你能帮助我。

我开发并工作了以下内容。

表模型

    public class SheepTableModel extends AbstractTableModel{    
ArrayList<Sheep> data = new ArrayList();
private String[] columnNames;
private SimpleDateFormat dateFormat = new SimpleDateFormat("dd.mm.yyyy");

public SheepTableModel() {

data.add(new Sheep(1, "Test", new Date(2014, 6, 7), "ADSF", "sdfwe", new Date(2014, 8, 27), 1, new Date(2014, 8, 27), "Testnotiz"));
data.add(new Sheep(1, "Test", new Date(2014, 6, 7), "ADSF", "sdfwe", new Date(2014, 8, 27), 1, new Date(2014, 8, 27), "Testnotiz"));
data.add(new Sheep(1, "Test", new Date(2014, 6, 7), "ADSF", "sdfwe", new Date(2014, 8, 27), 1, new Date(2014, 8, 27), "Testnotiz"));

columnNames = new String[]{"Nummer", "Ohrenmarkennummer", "Geburtsdatum", "Nummer Mutter", "Nummer Vater", "DKV Datum", "Anmerkungsnummer", "Anmerkungsdatum", "Notiz"};
}

@Override
public int getRowCount() {
return data.size();
}

@Override
public int getColumnCount() {
return 9;
}

@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Sheep s = (Sheep) data.get(rowIndex);
switch(columnIndex){
case 0: return s.getSheepnumber();
case 1: return s.getEarnumber();
case 2: return s.getBirthdate();
case 3: return s.getNr_mum();
case 4: return s.getNr_dad();
case 5: return s.getDkvdate();
case 6: return s.getNotenr();
case 7: return s.getNote_date();
case 8: return s.getNote_addtext();
default: return null;
}

}

@Override
public boolean isCellEditable(int row, int col){
return col != 0;
}

@Override
public void setValueAt(Object value, int row, int col) {
switch(col){
case 1: data.get(row).setEarnumber(((String) (value))); break;
case 2: data.get(row).setBirthdate(((Date) (value)));break;
case 3: data.get(row).setNr_mum(((String) (value)));break;
case 4: data.get(row).setNr_dad(((String) (value)));break;
case 5: data.get(row).setDkvdate(((Date) (value)));break;
case 6: data.get(row).setNotenr(((Integer)(value)));break;
case 7: data.get(row).setNote_date(((Date)(value)));break;
case 8: data.get(row).setNote_addtext(((String) (value)));
}
fireTableCellUpdated(row, col);
}

@Override
public String getColumnName(int columnIndex){
return columnNames[columnIndex];
}

@Override
public Class<?> getColumnClass(int columnIndex) {
switch(columnIndex){
case 0: return int.class;
case 1: return String.class;
case 2: return Date.class;
case 3: return String.class;
case 4: return String.class;
case 5: return Date.class;
case 6: return int.class;
case 7: return Date.class;
case 8: return String.class;
}
return Object.class;

}

}

日期渲染器

    public class DateCellRenderer extends DefaultTableCellRenderer{

@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 ){
// Use SimpleDateFormat class to get a formatted String from Date object.
String strDate = new SimpleDateFormat("dd.mm.yyyy").format((Date)value);
// Sorting algorithm will work with model value. So you dont need to worry about the renderer's display value.
this.setText( strDate );
}

return this;
}
}

最佳答案

你需要做两件事。

  1. 创建渲染器。查看Table Format Render一个简单的方法来做到这一点。请注意,您不能仅使用 "dd.mm.yyyy" 作为格式,因为大写/小写字符含义不同。阅读 SimpleDateFormat API 以了解要使用的正确格式字符。

  2. 您需要创建一个自定义编辑器来编辑日期。我猜您应该能够将 DefaultCellEditor 与使用适当掩码的 JFormattedTextField 一起使用。阅读 Swing 教程中关于 How to Use Formatted Text Fields 的部分有关 JFormattedTextField 的更多信息。

基本代码可能类似于:

MaskFormatter format = new MaskFormatter(...);
JFormattedTextField ftf = new JFormattedTextField( format );
DefaultCellEditor dce = new DefaultCellEditor( ftf );
table.getColumnModel().getColumn(...).setCellEditor(dce);

Swing 教程还有一个关于如何使用表格的部分,其中提供了有关渲染和编辑器的更多信息。

关于java - JTable 中 util.Date 的日期编辑器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26167750/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com