【问题标题】:Need to make a JTable with 1000 rows需要制作一个 1000 行的 JTable
【发布时间】:2014-06-16 17:07:14
【问题描述】:

我正在为客户端开发 Java 中的 GUI 应用程序。该 GUI 的其中一个部分需要同时上传大约 1000 条记录,每条记录具有 17 个属性(即它需要一个 1000 X 17 表)。现在 Netbeans IDE 7.2.1 在 Jtable 中一次最多允许 100 行。有什么建议可以让我一次显示 1000 个条目。我考虑过一个接一个地有 10 个表,但这会留下非常混乱的编码,稍后在后端完成!

【问题讨论】:

  • 患者:“医生,Netbeans 不允许我向 JTable 添加超过 100 行。”医生:“然后直接编写 JTable 代码,而不是使用 IDE!”。

标签: java swing user-interface jtable


【解决方案1】:

不要使用 IDE 来创建 GUI。 IDE 会生成糟糕的代码,该代码会创建一个表,其中包含您要创建的行数的空值。

一个表可以容纳的行数没有限制。如果您手动创建代码,您可以执行以下简单操作:

DefaultTableModel model = new DefaultTableModel(columnNames, 0);
JTable table = new JTable(model);

这将使用您指定的列名创建一个空表

然后您可以使用DefaultTableModel.addRow(...) 方法单独添加行。

或者您可以使用 DefaultTableModel.setDataVector(...) 方法一次添加所有行。

【讨论】:

  • “不要使用 IDE 来创建你的 GUI。IDE 生成的代码很糟糕......”这是错误的!
  • 对于某些 IDE,生成的代码确实很难看,但对于更好的 IDE,它或多或少与手写代码相同。看看google window builder eclipse plugin。 IMO 它生成漂亮的代码并允许往返代码编辑。但是对于表格,我也不会使用 gui guilder,而是将表格连接到控件中。
【解决方案2】:

您可以使用您喜欢的任何 IDE 创建您的 GUI。 Netbeans 在这方面没有问题。 Netbeans 与任何其他编辑工具一样,允许您完美地创建一些类,例如扩展 AbstractTableModel 的 MyModel,它没有 GUI,您应该使用它来将您的模型与具有 GUI 的视图和控制器分开。

然后您的 JTable 将自动调用 getValueAt(row, col)getRowCount() 以显示您的 1.000 或 1.000.000 行的微小子集需要显示。

您不必将所有 1000 条记录加载到任何 Vector 或 ArrayList。只需让 getValueAt(row, col) 读取每一行并返回每一列。

您的用户很可能不会每次都向下滚动,并且不会要求 TableModel 提供超过第一次渲染后应该可见的 40-60 行的任何内容。

这个例子显示了 getValueAt,用于来自数据库的可滚动 ResultSet sr:

@Override
public Object getValueAt(int row, int column) {
    try {
        sr.absolute(row + 1); // position your ResultSet. 

        switch (column) {
            case 0:
                return sr.getInt("...");
            case 1:
                return sr.getString("...");
            case 2:
                return sr.getString("...");
            case 3:
                return ......
            default:
                return ("-");
        }
    } catch (SQLException sex) {
        ........
    }
}

这是在 GUI 端发生的事情:

  1. 是 JTable。由于您使用 TableModel,它只会在运行时向您显示 JTable。
  2. 在这里,您可以将模型绑定到 NetBeans 的自动生成代码。
  3. 这是您的模型的实例。您也可以在此处编写类似“new MyModel()”的内容。

生成的代码也不是怪物:

    ...
    jTable1.setModel(etb);
    jTable1.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
    jTable1.addMouseListener(new java.awt.event.MouseAdapter() {
        public void mouseClicked(java.awt.event.MouseEvent evt) {
            myMouseClicked(evt);
        }
    });
    jScrollPane1.setViewportView(jTable1);
    ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-26
    • 1970-01-01
    • 1970-01-01
    • 2019-09-14
    • 2012-10-12
    • 1970-01-01
    • 2023-02-06
    • 2010-10-17
    相关资源
    最近更新 更多