GUI(java)中的jTable不会显示数据库中的所有数据! TableModel中的错误? [英] jTable in GUI (java) does not show all data from database! error in TableModel?

查看:96
本文介绍了GUI(java)中的jTable不会显示数据库中的所有数据! TableModel中的错误?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是不得已的方法.我正在研究信息系统的开发,甚至我的老师也无法解决这个问题...

这是问题所在:我在GUI中的jTable给了我这个:

这是Microsoft Management Studio向我显示的内容:

您可以说jTable(GUI)有两个主要问题:

  1. 列名名称"不包含任何信息.而且应该吗?为什么不显示?

  2. 如您所知,该表包含几列,甚至太多,甚至无法显示.因此,我想更改限制",以便jTable仅显示前6列.

这是DataAccessLayer中创建表"的代码:

    private TableModel getResultSetAsDefaultTableModel(ResultSet rs) {
    try {

        String[] columnHeadings = new String[0];
        Object[][] dataArray = new Object[0][0];


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

        for (int i = 1; i <= columnCount; i++) {
            String columnName = md.getColumnName(i);
            columnHeadings = Arrays.copyOf(columnHeadings, columnHeadings.length + 1);
            columnHeadings[i - 1] = columnName;
            }

        int r = 0;

        while (rs.next()) {

            Object[] row = new Object[columnCount];
            for (int i = 1; i <= columnCount; i++) {
                row[i - 1] = rs.getObject(i);
            }

            dataArray = Arrays.copyOf(dataArray, dataArray.length + 1);
            dataArray[r] = row;

            r++;
        }

        DefaultTableModel dtm = new DefaultTableModel(dataArray, columnHeadings) {
            public boolean isCellEditable(int row, int column) {

                return false;
            }
        };

        return dtm;

    } catch (SQLException ex) {

        Logger.getLogger(Dataaccesslayer.class.getName()).log(Level.SEVERE, null, ex);
    }

    return null;

}

如果您想让我向您展示代码的路径(框架,控制器),请说出来,然后将其发布.

如果有人能解决这个问题,我将非常感激...

此致

基督徒

解决方案

像下面那样更改您的方法,我认为它可以帮助您:

private TableModel getResultSetAsDefaultTableModel(ResultSet rs) {
    try {

        List<String> columnHeadings = new ArrayList<String>();
        Object[][] dataArray = new Object[0][0];

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

        for (int i = 1; i <= columnCount; i++) {
            columnHeadings.add(md.getColumnName(i));
        }

        int r = 0;
        while (rs.next()) {
            Object[] row = new Object[columnCount];
            for (int i = 1; i <= columnCount; i++) {
                row[i-1] = rs.getObject(i);
            }
            dataArray = Arrays.copyOf(dataArray, dataArray.length + 1);
            dataArray[r] = row;
            r++;
        }

        DefaultTableModel dtm = new DefaultTableModel(dataArray,columnHeadings.toArray(new Object[columnHeadings.size()])) {
            public boolean isCellEditable(int row, int column) {
                return false;
            }
        };

        return dtm;

    } catch (SQLException ex) {
        Logger.getLogger(Dataaccesslayer.class.getName()).log(Level.SEVERE,null, ex);
    }
    return null;
}

要显示并非所有列,请使用dtm.setColumnCount(2);.这里2是要显示的列数.

This is a last resort. I'm studying development of Information Systems and even my teachers can't solve this... this is a nut for you to crack!!

This is the problem: My jTable in GUI gives me this:

This is what Microsoft Management Studio shows me:

As you can tell the jTable (GUI) has got 2 main problems:

  1. The columnname "Name" does not contain any information. And it should? Why isn't it showing?

  2. Since as you can tell, the table contains several columns, too many to even show. I therefore want to "add a restriction" that changes so that the jTable only shows the first 6 columns.

This is the code for the "creation of the table", in the DataAccessLayer:

    private TableModel getResultSetAsDefaultTableModel(ResultSet rs) {
    try {

        String[] columnHeadings = new String[0];
        Object[][] dataArray = new Object[0][0];


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

        for (int i = 1; i <= columnCount; i++) {
            String columnName = md.getColumnName(i);
            columnHeadings = Arrays.copyOf(columnHeadings, columnHeadings.length + 1);
            columnHeadings[i - 1] = columnName;
            }

        int r = 0;

        while (rs.next()) {

            Object[] row = new Object[columnCount];
            for (int i = 1; i <= columnCount; i++) {
                row[i - 1] = rs.getObject(i);
            }

            dataArray = Arrays.copyOf(dataArray, dataArray.length + 1);
            dataArray[r] = row;

            r++;
        }

        DefaultTableModel dtm = new DefaultTableModel(dataArray, columnHeadings) {
            public boolean isCellEditable(int row, int column) {

                return false;
            }
        };

        return dtm;

    } catch (SQLException ex) {

        Logger.getLogger(Dataaccesslayer.class.getName()).log(Level.SEVERE, null, ex);
    }

    return null;

}

If you want me to show you the path of the code (frame, controller) just say so and I'll post it.

I would be so thankful if anyone can solve this...

Regards,

Christian

解决方案

Change your method like next, I think it helps you:

private TableModel getResultSetAsDefaultTableModel(ResultSet rs) {
    try {

        List<String> columnHeadings = new ArrayList<String>();
        Object[][] dataArray = new Object[0][0];

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

        for (int i = 1; i <= columnCount; i++) {
            columnHeadings.add(md.getColumnName(i));
        }

        int r = 0;
        while (rs.next()) {
            Object[] row = new Object[columnCount];
            for (int i = 1; i <= columnCount; i++) {
                row[i-1] = rs.getObject(i);
            }
            dataArray = Arrays.copyOf(dataArray, dataArray.length + 1);
            dataArray[r] = row;
            r++;
        }

        DefaultTableModel dtm = new DefaultTableModel(dataArray,columnHeadings.toArray(new Object[columnHeadings.size()])) {
            public boolean isCellEditable(int row, int column) {
                return false;
            }
        };

        return dtm;

    } catch (SQLException ex) {
        Logger.getLogger(Dataaccesslayer.class.getName()).log(Level.SEVERE,null, ex);
    }
    return null;
}

For showing not all columns use dtm.setColumnCount(2);. Here 2 is column count to show.

这篇关于GUI(java)中的jTable不会显示数据库中的所有数据! TableModel中的错误?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆