【问题标题】:Add a checkbox to a JTable which has been generated from a CSV将复选框添加到从 CSV 生成的 JTable
【发布时间】:2016-02-20 12:45:45
【问题描述】:

我有一个循环遍历 CSV 文件的函数,并生成数据的 DefaultTableModel(然后显示在 JTable 中)。这个函数是:

public DefaultTableModel createTableModel(Reader in, Vector<Object> headers) {
        DefaultTableModel model = null;
        Scanner s = null;
        Vector<Object> c;
        try {
            Vector<Vector<Object>> rows = new Vector<Vector<Object>>();
            s = new Scanner(in);
            while (s.hasNextLine()) {
                rows.add(new Vector<Object>(
                        Arrays.asList(s.nextLine().split("\\s*,\\s*", -1))));
            }
            if (headers == null) {
                headers = rows.remove(0);
                model = new DefaultTableModel(rows, headers);
            } else {
                model = new DefaultTableModel(rows, headers);
            }
            return model;
        } finally {
            s.close();
        }
    }

但是,我想修改此代码以在第一列数据中添加一个复选框(我在生成 CSV 文件时已将其添加为模板,无论如何作为标题为“已选择”的列),它填充每行的布尔值false

问题是,我不知道在我的代码中应该去哪里(在网上阅读后,我发现这是通过设置列的类来让 JTable 自动生成选择文本框的方式到Boolean)。请注意,这里的“选定”列是第 1 列硬编码:

{
    public Class getColumnClass(int column) {
         if(column==1){
                        return Boolean.class;
         }else return String.class;
      }
 };

应该被定义(我假设它应该在上面的函数中)。

【问题讨论】:

标签: java csv checkbox jtable defaulttablemodel


【解决方案1】:

您可以继承 DefaultTableModel 并添加覆盖您需要的函数,而不是编写创建 DefaultTableModel 的函数。

如果你想要第一列,它应该是 0,而不是 1。而且你可能还需要重写 getValueAt() 以实际返回一个布尔值。

【讨论】:

    猜你喜欢
    • 2015-11-22
    • 1970-01-01
    • 2011-11-15
    • 2017-08-26
    • 1970-01-01
    • 2017-02-07
    • 2015-08-13
    相关资源
    最近更新 更多