java - 如何在特殊的抽象模型JTable中使列可编辑

标签 java swing csv abstracttablemodel

嘿,我正在做作业,现在我遇到了不可编辑单元格的问题,实际上它变成了可编辑的,但是编辑的结果没有设置在数组列表中,我尝试了很多来自互联网的解决方案,但它不起作用。 所以我的工作就像注册系统,它获取有关客人的信息,然后将其存储到 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/

相关文章:

java - Flutter错误:无法下载bundletool.jar(com.android.tools.build:bundletool:0.9.0)

java - 实例化和初始化 java.nio.files.Path?

java - JOptionPane showConfirmDialog 只有一个按钮

java - 取消选中作为一个组添加的所有复选框

java - 在 CSV 中显示时间戳的问题

php - 使用 php 编码 csv 文件

python - 将 .csv 文件读入 Python 列表

java - 100% 不可变,但仍然不是线程安全的

java - Java swing MVC 与 Android 设计模式的比较

Java向上转换作用域解析问题