嘿,我正在做作业,现在我遇到了不可编辑单元格的问题,实际上它变成了可编辑的,但是编辑的结果没有设置在数组列表中,我尝试了很多来自互联网的解决方案,但它不起作用。 所以我的工作就像注册系统,它获取有关客人的信息,然后将其存储到 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;
}
}
这是我的主课的一部分 它是激活显示功能的菜单项的 Action 监听器 (我没有复制所有类,因为它有近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 转换为数组列表的 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 新手,这是我的第一个程序,请您解释得更容易一些
最佳答案
but the result of editing didn't set at arraylist,
您需要重写TableModel的setValueAt(...)
方法来保存数据。
它会是这样的:
String[] row = data.get(row);
row[column] = value;
this.fireTableCellUpdated(row, col);
此外,isCellEditable(...)
方法不应执行任何处理。它只是返回给定列的真/假。如果您希望所有列都可编辑,那么它应该是:
public boolean isCellEditable(int row, int col) {
//setValueAt(Data, row, col);
//this.fireTableCellUpdated(row, col);
return true;
}
关于java - 如何在特殊的抽象模型JTable中使列可编辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37403245/