Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我无法从自定义表模型查看JTable中的数据_Java_Swing_Jtable - Fatal编程技术网

Java 我无法从自定义表模型查看JTable中的数据

Java 我无法从自定义表模型查看JTable中的数据,java,swing,jtable,Java,Swing,Jtable,这是我的密码: Object[]RefreshCartonDestOtable=dbutils.checker.CartonDestOtable(); String[]colnames=新字符串[6]; colnames[0]=selectCodes.invoiceTable.getColumnName(0.toString(); colnames[1]=selectCodes.invoiceTable.getColumnName(1.toString(); colnames[2]=select

这是我的密码:

Object[]RefreshCartonDestOtable=dbutils.checker.CartonDestOtable();
String[]colnames=新字符串[6];
colnames[0]=selectCodes.invoiceTable.getColumnName(0.toString();
colnames[1]=selectCodes.invoiceTable.getColumnName(1.toString();
colnames[2]=selectCodes.invoiceTable.getColumnName(2.toString();
colnames[3]=selectCodes.invoiceTable.getColumnName(3.toString();
colnames[4]=selectCodes.invoiceTable.getColumnName(4.toString();
colnames[5]=selectCodes.invoiceTable.getColumnName(5.toString();
MyTableModel mod=新的MyTableModel(RefreshCartonDestOtable,colnames);
selectCodes.invoiceTable=新JTable(mod);
选择Codes.invoiceTable.setVisible(true);
自定义模型如下所示:

250VV  250VV0575W20140819  false  B1  19 August 2014  
250VV  250VV0561W20140819  false  B1  19 August 2014  
250VV  250VV0560W20140819  false  B1  19 August 2014  
250VV  250VV0559W20140819  false  B1  19 August 2014  
250VV  250VV0558W20140819  false  B1  19 August 2014
类MyTableModel扩展了DefaultTableModel{ 公共MyTableModel(对象数据[],对象列名称[]){ 超级(数据、柱状图); } 公共类getColumnClass(int-col){ 如果(列==5){ 返回Boolean.class; }否则{ 返回字符串.class; } } @凌驾 公共布尔值可编辑(int行,int列){ if(col==0)//第一列将不可编辑 { 返回false; }否则{ 返回true; } } } 该表显示了
列名称
,但未显示数据。数组中有数据,示例输出如下图所示:

250VV  250VV0575W20140819  false  B1  19 August 2014  
250VV  250VV0561W20140819  false  B1  19 August 2014  
250VV  250VV0560W20140819  false  B1  19 August 2014  
250VV  250VV0559W20140819  false  B1  19 August 2014  
250VV  250VV0558W20140819  false  B1  19 August 2014
共有六列。第六列我想在单元格中放置一个复选框

谁能帮帮我吗

以下是CartonDestOtable()的源代码


当我使用数组[x][5]=false时;我得到一个错误'java.lang.ArrayStoreException:java.lang.Boolean',所以我决定使用数组[x][5]=“false”

你没有像我建议的那样提供MCVE,所以很难说是怎么回事。不过,我看到的第一件事是
ResultSet
使用不当,您不需要做所有这些事情。例如,使用
rs.last()

-将光标移动到此
ResultSet
对象中的最后一行

关于

默认的
ResultSet
对象是不可更新的,其光标仅向前移动。因此,您只能遍历它一次,并且只能从第一行到最后一行。可以生成可滚动和/或可更新的ResultSet对象(参见API以获取如何执行此操作的示例)

因此,假设您没有使
ResultSet
可滚动,这将解释您没有得到任何结果,因为您已将光标移动到调用
rs.last()

也就是说,您不需要获得行计数。使用动态数据结构来创建模型。只需使用一个按钮。如果对数据使用数组,
DefaultTableModel
无论如何都会将其转换为
向量(在引擎盖下)

一种常见的方法是使用类并获取列计数,动态创建一个
向量
,然后以这种方式构造您的
DefaultTableModel
。比如:

public DefaultTableModel getModelFromResultSet(ResultSet rs) throws Exception {

    ResultSetMetaData md = rs.getMetaData();
    int columnCount = md.getColumnCount();

    String[] cols = new String[columnCount];
    for (int i = 1; i <= columnCount; i++) {
        col[i - 1] = md.getColumnName(i);
    }

    Vector<Vector<Object>> dataVector = new Vector<Vector<Object>>();
    while(rs.next()) {
        Vector<Object> row = Vector<Object>();
        for (int i = 1; i <= columnCount; i++) {
            row.add(rs.getObject(i));
        }
        dataVector.add(row);
    }

    DefaultTableModel model = new DefaultTableModel(dataVector, cols) {
        @Override
        public Class<?> getColumnClass(int column) {
            ...
        }
    };
    return model;
}

这样做有什么意义。您正在使每个对象都必须是字符串。这可能不适合渲染。

为什么要返回java类?我希望最后一列返回boolean类,以便显示一个复选框,而不是打印true/False。在我看来,这是一个奇怪的代码,我认为值的数据类型与组件创建复选框所需的数据类型不兼容。我只建议将其简化为nessacary,并编写'true'或'false'或尝试将其转换为primitiv boolean。可能最好提供一个我们可以复制、粘贴、编译、运行并亲自查看您面临的问题
isCellEditable()
可以简化为
return col!=0
Object[][] array = null;
...
array = new String[row][6];