嘿伙计们我正在完成我的任务,现在我遇到了不可编辑单元格的问题,实际上它变得可编辑了,但是编辑的结果没有设置在arraylist,我尝试了很多来自互联网的解决方案,但它并没有&# 39;工作。 所以我的工作就像注册系统一样,获取有关客户的信息,然后将其存储到csv文件中。在附加功能中,程序必须允许显示,更新,删除和搜索功能。
我完成了所有操作,没有更新,删除和搜索。你能不能看我的代码,帮助我或提供建议,链接或有用的东西。
这是我的抽象模型:
public class ddispmodel extends AbstractTableModel {
private final String[] columnNames = { "FirstName", "SecondName", "Date of
birth", "Gender", "Email", "Address", "Number", "Attending","ID" };
private ArrayList<String[]> Data = new ArrayList<String[]>();
private boolean editable;
public void AddCSVData(ArrayList<String[]> DataIn) {
this.Data = DataIn;
this.fireTableDataChanged();
}
@Override
public int getColumnCount() {
return columnNames.length;// length;
}
@Override
public int getRowCount() {
return Data.size();
}
@Override
public String getColumnName(int col) {
return columnNames[col];
}
@Override
public Object getValueAt(int row, int col) {
return Data.get(row)[col];
}
public boolean isCellEditable(int row, int col) {
setValueAt(Data, row, col);
this.fireTableCellUpdated(row, col);
return true;
}
}
这是我班级的一部分 是菜单项的动作监听器激活显示功能 (我没有复制所有课程,因为它有近1000行,但如果有必要,我可以提交所有代码)
dlog.addActionListener(new ActionListener (){
public void actionPerformed(ActionEvent e){
CSVFileDomestic Rd = new CSVFileDomestic();
ddispmodel ddispm = new ddispmodel();
ddisp.setModel(ddispm);
File DataFile = new File("D:\\cdne4\\WorkPlace\\Domestic.csv");
ArrayList<String[]> Rs2 = Rd.ReadCSVfile(DataFile);
ddispm.AddCSVData(Rs2);
System.out.println("Rows: " + ddispm.getRowCount());
System.out.println("Cols: " + ddispm.getColumnCount());
cl.show(cp, "dispDomPanel");
}
});
和将日期从csv转换为arraylist
的File类 import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Arrays;
public class CSVFileDomestic {
private final ArrayList<String[]> Rs = new ArrayList<String[]>();
private String[] OneRow;
public ArrayList<String[]> ReadCSVfile(File DataFile) {
try {
BufferedReader brd = new BufferedReader(new
FileReader(DataFile));
while (brd.ready()) {
String st = brd.readLine();
OneRow = st.split(",");
Rs.add(OneRow);
System.out.println(Arrays.toString(OneRow));
}
}
catch (Exception e) {
String errmsg = e.getMessage();
System.out.println("File not found:" + errmsg);
}
return Rs;
我是Java新手,这是我的第一个程序,请你能更容易解释
答案 0 :(得分:2)
但是编辑的结果没有设置在arraylist,
您需要覆盖TableModel的setValueAt(...)
方法以保存数据。
这将是:
String[] row = data.get(row);
row[column] = value;
this.fireTableCellUpdated(row, col);
此外,isCellEditable(...)
方法不应进行任何处理。它只返回给定列的true / false。如果您希望所有列都可编辑,那么它应该只是:
public boolean isCellEditable(int row, int col) {
//setValueAt(Data, row, col);
//this.fireTableCellUpdated(row, col);
return true;
}
答案 1 :(得分:0)
我完成了这个))并去做其他选择。 camickr谢谢你的帮助,你给我的方式,这让我回答)) 我花了近6个小时试图去做,最后我明白了。 如果有人有意思,回答是
public boolean isCellEditable(int row, int col) {
return true;
}
@Override
public void setValueAt(Object aValue, int row, int col){
Data.get(row)[col]= (String) aValue;
fireTableCellUpdated(row,col);
所以我只是制作新的方法setValueAT,它说我是camickr。 我去了Oracle网站并阅读了它,然后尝试了它,但是 它没有,因为aValue不能从object转换为String,最后我将aValue作为String启动,所以现在它可以工作。但不是全部,它只改变了arraylist。需要新方法将arraylist转换为csv文件。我现在正在努力,也许在我展示它之后。对不起我的理论,我是java新手,只是学习它是如何工作的))