【问题标题】:extra column automatically appended in jtable (how to remove it )jtable 中自动附加的额外列(如何删除它)
【发布时间】:2011-12-13 15:17:42
【问题描述】:

我正在做一个 java 项目 我正在使用 jdk 1.6

我想在 jtable 中添加数据库中的数据 我通过使用 DefaulTableModel 实现了这一点 我通过使用 ResultSetMetadata 获得了列名 但问题是

**我在 jtable 的第 0 个索引处获得了一个额外的列名 A 我想删除此列 它看起来像这样

一个 |部门号

我只需要 deptno **

用于创建此模型的代码是

private void updateTable() throws Exception {

    String sqlrow = "Select count(*) from emp";
    rs= db.sta.executeQuery(sqlrow); 
        rs.next();                           
     int rows=rs.getInt(1);  
    System.out.println(""+rows);


    String sqldata = "SELECT deptno FROM emp";
   rs =db.sta.executeQuery(sqldata);
    rsMD = rs.getMetaData();
   numberOfColumns = rsMD.getColumnCount();
   ColumnNames = new String[numberOfColumns+1];
    System.out.println(""+numberOfColumns);

    for(int i=1;i<=numberOfColumns;i++)
    {
        String colName=rsMD.getColumnName(i);
        ColumnNames[i] = colName;
        System.out.println(""+ColumnNames[i]);
    }


    //Cj is a method which takes sqlQuery , rows, column
    Object[][] rowData=CJ(sqldata,rows,numberOfColumns);
    //jt is table name 
    jt.setModel(new DefaultTableModel(rowData,ColumnNames));

}

// cj() 的代码

     public Object[][] CJ(String sql,int rows,int cols)
{
    Object[][] obj=new Object[rows][cols+1];
    ResultSet rs=null;
    try{
         rs= db.sta.executeQuery(sql);
        int c=0;
            while(rs.next())
            {        
            for(int i=1;i<=cols;i++)
                {
                      obj[c][i]=rs.getString(i);                        
                }
                c++;
            }

        }
    catch(Exception ex)
    {
        ex.printStackTrace();
    }
    return obj;
}

我正在使用此代码 按钮点击

                 updateTable();
            jsp = new JScrollPane(jt); // jt is Jtable
             jp.add(jsp); //jp is jpanel

请帮帮我

【问题讨论】:

  • 修正你的 shift 键并将其应用在每个句子的开头、单词“I”的每个实例以及适用于 J2SE 类的情况下,我可能能够阅读该问题。跨度>
  • 现在可以了吗?我觉得你现在明白了

标签: java swing jtable oracle11g


【解决方案1】:

不遵循命名约定会导致难以阅读,但我建议仔细查看以下代码

   numberOfColumns = rsMD.getColumnCount();
   ColumnNames = new String[numberOfColumns+1];
    System.out.println(""+numberOfColumns);

    for(int i=1;i<=numberOfColumns;i++)
    {
        String colName=rsMD.getColumnName(i);
        ColumnNames[i] = colName;
        System.out.println(""+ColumnNames[i]);
    }

在这里,您显式使用了更多列名,然后是 numberOfColumns。您的 CJ 方法的同上,您从索引 1 开始。 只需在索引 0 处开始所有 for 循环,使数组更短,一切都应该正常工作

【讨论】:

  • 兄弟它不能像在 java 中那样做索引从 1 开始如果我们放 0 然后无效索引错误
  • +1 用于发现问题(尽管解决方案已关闭)。当您访问“ColumnNames”数组时,您需要使用 (i - 1),因为数组索引是从零开始的。 @C_J,学习标准的 Java 命名约定。变量名不以大写字符开头。
  • 我是初学者,我不习惯命名约定,但我会注意不要犯这种错误
  • 我实现了,但现在空白列出现在 JTable 的黑色一侧,即 deptno | B 像这样
猜你喜欢
  • 1970-01-01
  • 2011-09-16
  • 2010-11-09
  • 2014-01-13
  • 1970-01-01
  • 2022-01-14
  • 1970-01-01
  • 1970-01-01
  • 2012-07-23
相关资源
最近更新 更多