Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.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 使用ResultSet TableModel在JTable中设置getColumnClass_Java_Swing_Jtable - Fatal编程技术网

Java 使用ResultSet TableModel在JTable中设置getColumnClass

Java 使用ResultSet TableModel在JTable中设置getColumnClass,java,swing,jtable,Java,Swing,Jtable,我有个问题。 我创建了一个像这样的DefaultTableModel--> 该字段包含“真”/“假”。 我做错了一件事,但我真的不知道到底是什么-( 有人能帮我吗 非常感谢 编辑: 我将buildTableModel更改为: public static DefaultTableModel buildTableModel(ResultSet rs) throws SQLException { ResultSetMetaData metaData = rs.getMetaD

我有个问题。 我创建了一个像这样的DefaultTableModel-->

该字段包含“真”/“假”。 我做错了一件事,但我真的不知道到底是什么-( 有人能帮我吗

非常感谢

编辑: 我将buildTableModel更改为:

public static DefaultTableModel buildTableModel(ResultSet rs)
        throws SQLException {

    ResultSetMetaData metaData = rs.getMetaData();


    // names of columns
    Vector<String> columnNames = new Vector<String>(1,1);
    int columnCount = metaData.getColumnCount();

    for (int column = 1; column <= columnCount; column++) {
        columnNames.add(metaData.getColumnName(column));
    }

    // data of the table
    Vector<Vector<Object>> data = new Vector<Vector<Object>>(10,2);

    while (rs.next()) {
        Vector<Object> vector = new Vector<Object>();

        for (int columnIndex = 1; columnIndex <= columnCount; columnIndex++) {

            if(rs.getObject(columnIndex).toString().equals("true"))
                vector.add(Boolean.TRUE);
            else        
            if(rs.getObject(columnIndex).toString().equals("false"))
                vector.add(Boolean.FALSE);
            else
                vector.add(rs.getObject(columnIndex));
        }

        data.add(vector);
    }

    return new DefaultTableModel(data, columnNames);

}
publicstaticdefaulttablemodel buildTableModel(ResultSet-rs)
抛出SQLException{
ResultSetMetaData元数据=rs.getMetaData();
//列名
向量列名称=新向量(1,1);
int columnCount=metaData.getColumnCount();

对于(int column=1;column您正在尝试将字符串值分配给布尔列(在Swing表中)。只需确保检索到的数据类型(数据模型)与表数据模型的类型匹配。

您正在尝试将字符串值分配给布尔列(在Swing表中)。只需确保检索到的数据类型(数据模型)与表数据模型的类型匹配。

可以返回(请注意,非常简单的矩阵,并以最少的工作量硬编码)

can返回(注意非常简单的矩阵,并以最少的工作量硬编码)


发布堆栈跟踪。我们甚至不知道是哪一行导致了异常。这是这一行:classType=Boolean.class;如何获取堆栈跟踪?不,这一行不可能导致异常。使用try/catch,然后在catch(exception ex)块中添加ex.printStackTrace()。堆栈跟踪应该出现在console中。顺便说一句,您的代码表明只有第一列是布尔值,其余都是字符串,因此请确保您检索的数据与这些类型匹配。嘿,我使用了以下方法:尝试{UpdateGrid grid=new UpdateGrid(“test”);}catch(异常e){System.out.println(e.getStackTrace());}在类初始化过程中,但无论如何,它都不会改变异常输出:线程“AWT-EventQueue-0”java.lang.ClassCastException中的异常:java.lang.String不能转换为java.lang.Boolean…对不起,我还不太擅长编程,所以我真的很无助-(顺便说一句,触发异常的不是-->classType=Boolean.class;这一行,而是因为它。如果我返回String.class,堆栈跟踪后不会发生错误。我们甚至不知道是哪一行导致了异常。是这一行:classType=Boolean.class;如何获取堆栈跟踪?不,这一行不可能导致异常。使用try/catch,然后在catch(Exception ex)块中添加ex.printStackTrace()。堆栈跟踪应该显示在控制台中。顺便说一句,您的代码表明只有第一列是布尔值,其余都是字符串,因此请确保您检索的数据与这些类型匹配。嘿,我使用了以下方法:try{UpdateGrid grid=new UpdateGrid(在类初始化上执行“test”);}catch(异常e){System.out.println(e.getStackTrace());},但无论如何,它都不会更改异常输出:线程“AWT-EventQueue-0”中的异常“java.lang.ClassCastException:java.lang.String不能转换为java.lang.Boolean…..对不起,我还不太擅长编程,所以我真的很无助;-(顺便说一句,触发异常的不是-->classType=Boolean.class;行-->但正是因为它。如果我返回String.class,就不会发生错误
this.table = new JTable(buildTableModel(this.rs)){
        // Make Cells uneditable
            @Override
            public boolean isCellEditable(int row, int column) {  
                if(table.getColumnName(column).contains("key")) return false;
                if(table.getColumnName(column).contains("datum")) return false;
                if(table.getColumnName(column).contains("user")) return false;
                return true;               
            }

            @Override
            public Class<?> getColumnClass(int columnIndex) {
                Class<?> classType;
                if(columnIndex == 1)
                    classType = Boolean.class;
                else
                    classType = String.class;
                return classType;
            }
        };
java.lang.String cannot be cast to java.lang.Boolean
public static DefaultTableModel buildTableModel(ResultSet rs)
        throws SQLException {

    ResultSetMetaData metaData = rs.getMetaData();


    // names of columns
    Vector<String> columnNames = new Vector<String>(1,1);
    int columnCount = metaData.getColumnCount();

    for (int column = 1; column <= columnCount; column++) {
        columnNames.add(metaData.getColumnName(column));
    }

    // data of the table
    Vector<Vector<Object>> data = new Vector<Vector<Object>>(10,2);

    while (rs.next()) {
        Vector<Object> vector = new Vector<Object>();

        for (int columnIndex = 1; columnIndex <= columnCount; columnIndex++) {

            if(rs.getObject(columnIndex).toString().equals("true"))
                vector.add(Boolean.TRUE);
            else        
            if(rs.getObject(columnIndex).toString().equals("false"))
                vector.add(Boolean.FALSE);
            else
                vector.add(rs.getObject(columnIndex));
        }

        data.add(vector);
    }

    return new DefaultTableModel(data, columnNames);

}
    public Class getColumnClass(int column) {
        int type;
        try {
            type = metaData.getColumnType(column + 1);
        } catch (SQLException e) {
            return super.getColumnClass(column);
        }
        switch (type) {
            case Types.CHAR:
            case Types.VARCHAR:
            case Types.LONGVARCHAR:
                return String.class;
            case Types.BIT:
                return Boolean.class;
            case Types.TINYINT:
            case Types.SMALLINT:
            case Types.INTEGER:
                return Integer.class;
            case Types.BIGINT:
                return Long.class;
            case Types.FLOAT:
            case Types.DOUBLE:
                return Double.class;
            case Types.DATE:
                return java.sql.Date.class;
            default:
                return Object.class;
        }
    }