【问题标题】:Column header name in JTable, JavaJTable,Java中的列标题名称
【发布时间】:2013-01-04 15:56:51
【问题描述】:

我正在用数据库中的数据填充 JTable。我已将 AbstractTableModel 子类化并将引用传递给 JTable。但是,我如何设法提取数据库中的列名并将它们设置为 JTable 中的“标题”?

提前致谢。

我已经有了这个,在控制台中显示标题名称,但我在 GUI 中没有列。我已将 JTable 附加到选项卡式窗格中的选项卡上。

@Override
public String getColumnName(int column) {
    try {
        System.out.println(dbhandler.getMetaData().getColumnName(column + 1));
        return dbhandler.getMetaData().getColumnName(column + 1);
    } catch (SQLException e) {
        e.printStackTrace();
        return "";
    }
}

【问题讨论】:

  • 当前显示的列标题是什么?默认的A、B、C..等?
  • 我根本没有任何列,都是行...

标签: java swing jtable jtableheader


【解决方案1】:

但是,我如何设法提取数据库中的列名并将它们设置为 JTable 中的“标题”?

您的表模型需要实现 getColumnName() 方法。然后你需要先用数据创建你的表模型。然后,您使用表模型创建 JTable,该表将为您构建列。

请参阅Table from Database 以获取提供可重用表格模型以及自动为您填充表格的方法的代码。

我根本没有任何列,都是行...

您需要将表格添加到 JScrollPane(不是 JPanel),并且标题将显示为滚动窗格的列标题视图:

JScrollPane scrollPane = new JScrollPane( table );

【讨论】:

  • 5 小时前我已经完成了您列表中的所有操作,但没有将其添加到滚动窗格中。非常感谢!
【解决方案2】:

您可以通过覆盖 AbstractTableModel 的 getColumnName(int i) 方法来实现,并将您的“标题”字符串放入此方法中。

【讨论】:

    【解决方案3】:

    您如何获取数据?使用“SELECT * FROM foo”?

    接口:java.sql.DatabaseMetaData

    getColumns(字符串目录,字符串 模式模式,字符串 表名模式,字符串 列名模式) 检索表中可用的列的描述 指定目录。

    【讨论】:

    • 对不起,我不明白。你能举个例子吗。是的,我的 sql 查询是 SELECT * FROM tablename
    【解决方案4】:

    您是否也覆盖了 getColumnCount?

    【讨论】:

      【解决方案5】:
      private void getColumnsFromDB (Connection connection, String tname) throws SQLException
      {
          String query = "SELECT * FROM " + tname;
          Statement stmt = connection.createStatement ();
          ResultSet res = stmt.executeQuery (query);
          ResultSetMetaData rsmd = res.getMetaData ();
          int numberOfColumns = rsmd.getColumnCount ();
          boolean searchable = rsmd.isSearchable (1);
          if (searchable)
          {
              for (int j = 1; j <= numberOfColumns; ++j)
              {
                  Column col = new Column (tname, rsmd, j);
                  // do something with Column (col);
              }
          }
      }
      

      类列,Ctor:

      public Column (String t, ResultSetMetaData rsmd, int j) throws SQLException
      {
          table = t;
          name = rsmd.getColumnName (j);
          schema = rsmd.getSchemaName (j);
          precision = -1;
          try
          {
              precision = rsmd.getPrecision (j);
          }
          catch (NumberFormatException nfe)
          {
              System.err.println ("nfe[gtd]: " + nfe + " " + t.getName () + "." + name);
          }
          scale = rsmd.getScale (j);
          catName = rsmd.getCatalogName (j);
          coltype = rsmd.getColumnType (j);
          coltypeName = rsmd.getColumnTypeName (j);
          int nulling = rsmd.isNullable (j);
          nullable = NULLTYP [nulling];
      }
      

      我希望它可以工作,因为这段代码是一个更大的代码库的一部分,而且我很久以前就使用它了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-11-08
        • 2015-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多