问题标签 [tablerowsorter]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3134 浏览

java - JTable 行过滤器

是否有可能获得与非过滤表对应的选择的索引?

使用 regexFilter 过滤表后。JTable getSelectedRow 返回过滤表的索引?

0 投票
2 回答
3118 浏览

java - 从附加了 RowSorter 的 DefaultTableModel 中删除行不会删除最后一行

我对 Java 有点陌生,尤其是对表格很陌生,而且我在完成一项特定任务时遇到了一些麻烦。

我有一个使用扩展 DefaultTableModel 的自定义表模型的 JTable,并且我已将 TableRowSorter 附加到表中。下面的示例应用程序有两个按钮——一个将行加载到表中,一个将从表中删除所有选定的行。

出于某种原因,如果您选择表格中的最后一行以及任何其他行,当您单击“删除”按钮时,它将删除除最后一行之外的所有选定行。您可以删除任何其他行组合,它工作正常。

更重要的是,如果您首先单击列标题对行进行排序(即使行的顺序没有改变),它也会正常工作。如果我在加载后添加一行来显式地对表中的行进行排序,那么问题就会“消失”,但我想知道为什么我所做的不正确。

要查看行为,请单击“加载”按钮以填充表格,选择表格中的所有行,然后单击“删除”按钮。它将删除除最后一行之外的所有行。

正如对 println 的调用所示,循环的第一次迭代将选定的行数减少了 2。无论表中有多少行,此行为都是一致的,但前提是您选择了表中的最后一行。

我正在使用 Java 版本 1.6.0_16。关于我做错了什么的任何想法?

谢谢,

0 投票
3 回答
1204 浏览

java - 使用 Java TableRowSorter 对长整数进行排序

我有一个处理大量数字的表,我希望它被排序。该表显示数字没有问题,但 TableRowSorter 似乎将数字视为整数,因此当它们超过最大整数值时,对大值进行错误排序。如何使用 TableRowSorter 对 Long 进行排序?

0 投票
0 回答
3560 浏览

java - 使用 RowFilter 后更新 JTable

我能够将过滤器附加到 GraphTable(从 JTable 扩展而来)。我正在尝试一个示例过滤器,它过滤所有以字母“A”开头的行。

include 方法对所有以“A”开头的条目返回 false,对其他条目返回 true。

但此更新并未反映在表中。也((JTable)leftTable).updateUI()没有((JTable)leftTable).revalidate()更新表格。我相信这会从视图中过滤这些行。我应该怎么做才能使更改立即反映在视图中。

请给我任何指示或建议?

0 投票
1 回答
266 浏览

swing - 为什么我的 TableRowFilter 不能过滤?

我正在尝试使用 TableRowFilter 过滤 JTable 。它在一个简单的例子上对我有用,但我似乎无法让它在真实的东西上工作。过滤器被调用,日志被打印——但我仍然看到这些行。有任何想法吗?

0 投票
2 回答
623 浏览

java - TableRowSorter and RowFilter in java 1.4

I'm actually in a middle of a small problem. I have discovered that TableRowSorter and RowFilter are not included in Java 4. All of our clients are using Java 1.4.2_08 and it's not convenient for us to install java 6 on their machines. Is there by any chance, a way in which I can use the TableRowSorter, and the RowFilter classes, by using JDK 1.4.2_08? Please help.

0 投票
3 回答
11497 浏览

swing - 添加 TableRowSorter 后向模型添加值导致 java.lang.IndexOutOfBoundsException: Invalid range

将 TableRowSorter 添加到表及其相应模型后,任何相应的添加都专门在 firetabletablerowsinserted 导致异常。从测试中可以清楚地看出 GetRowCount() 正在返回一个超出模型范围的值。但是,在添加排序器或过滤器后如何继续向表中添加值对我来说没有意义?

例如,我在向表中添加任何内容之前设置行过滤器,然后在我的模型中使用以下调用向表中添加一个值:

行数大小为 1 并引发异常:

如果我在不先添加分拣机的情况下执行相同的步骤,一切都很好。我假设可能我需要通知模型排序器可能已经进行了更改并尝试了以下操作但仍然返回异常:

我什至试图在调用 fire 之前通知模型内部的排序器一个值已添加到模型中,如下所示,但它也失败了:

最后,我对 FireTableRowsInsterted(0,0) 进行了硬编码,它不会引发任何异常。但是什么都没有添加到表中?所以,我知道这绝对是某种类型的 OutOfBounds 问题。我已经看遍了,似乎找不到答案。如果有人知道这是如何工作的,那将非常有帮助。这是在 jpanel 中设置排序器的代码:

这是我的模型中为模型增加价值的代码:

0 投票
3 回答
2770 浏览

java - 基于隐藏列的JTable排序

我想JTable根据一个隐藏列对行进行排序。

假设我有一个这样的 JTable

现在我还有一个隐藏的 column3,我不想显示。当用户单击 Column2 时,它应该基于 Column3(隐藏列)而不是基于 Column2 对行进行排序。

如何在 JTable 中实现这一点?

0 投票
2 回答
6167 浏览

java - 在 JTable 中对双精度值进行排序

我发现了很多与此相关的问题,但我还没有找到一个简单的解决方案来解决我的问题。

我找不到让 JTable 正确排序 Double 值的方法。

我扩展了 AbstractTableModel 以接收一个 Class 数组并为每列返回正确的类型:

然后在我的自定义 JTable 构造函数中:

但是在添加行时出现此错误:

DecimalFormat.format(Object number, StringBuffer toAppendTo, FieldPosition pos)它在接受大多数数字类型但 Double的方法上失败。

如果我对 Double 列使用另一个类,则不会出现错误,但排序仍然无法按预期工作。我尝试了不同的数字类,但似乎没有一个可以正确排序双精度数:

我不确定我需要的是实现自定义 RowSorter、自定义 CellRenderer 还是两者兼而有之。

有人可以指导我如何以更简单的方式解决这个问题吗?

非常感谢和最好的问候。

已编辑:已解决

很难说出问题出在哪里。

包含 Object[] 行的 ArrayList 是使用 getString(int) 而不是 getObject(int) 或 getDouble(int) 从数据库 ResultSet 填充的,因此渲染器无法将该值用作 Double。奇怪的是,它没有使用 Integer 或 Number 作为列类给出异常,但无论如何它都被排序为 String 。我在错误的类中寻找问题,因为我确信我的 ArrayList 只包含对象。

非常感谢您的示例,看着它们我注意到我的双打实际上是字符串,然后我可以找到转换发生的位置。

0 投票
1 回答
3944 浏览

java - 在对行进行排序后更改 Swing JTable 中的行颜色

我们正在使用JTable显示数据和状态 ( New, Processed, Closed) 的 a。每个状态行都有不同的颜色,这是通过重载实现prepareRenderer()JTable

现在我们需要对该表进行排序,我们正在使用table.setAutoCreateRowSorter(true);它来实现这一点。行得到正确排序,但行的颜色保持不变。在此操作之后,我们需要根据状态列将颜色重新应用到所有行。

我想知道实现这一目标的最佳方法是什么。我可以想到几种方法:

  1. 重新绘制/重新验证表。但我认为仅仅这样做是行不通的。
  2. 捕获mouseClicked事件并确定是否单击了列标题然后prepareRenderer()手动调用,然后调用 repaint/revalidate
  3. 然后我在这里阅读了其中一个问题,其中提到的答案之一是不要直接调用 repaint/revalidate,而是更改底层数据模型,它会自动调用上述方法。

我不知道该怎么做。任何人都可以提供有关实现此目标的正确方法的见解吗?