问题标签 [jtable]

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 投票
4 回答
3079 浏览

java - 当 SQL 进行排序时,如何启用用于排序 JTable 的 GUI 行为?

如何启用 JTable 图标和行为以按列对表行进行排序,而不让它使用比较谓词进行排序?也就是说,如何告诉表头在正在使用的列中显示升序/降序排序的箭头,并在排序顺序/列更改时让它调用适当的方法?

我正在尝试创建一个由 SQL 查询或视图支持的(可编辑、可过滤、可排序的)JTable。这些行可能不适合内存,并且可能无法干净地映射到 java 对象,所以我想在 SQL 中进行所有排序/过滤。我已经编写了用于更改查询以适应按列排序、按值过滤和可见列的代码。

TYPE_SCROLL_SENSITIVE,为了使用它,我计划使用and编写基于 ResultSet 的 JTableModel CONCUR_UPDATABLE,因此对 DB 的更改会传播到 ResultSet。我将定期(每秒几次)强制刷新 ResultSet 中的可见 JTable,因此对数据库的更改对用户可见。用户对表的更改将在验证后传递给可更新的 ResultSet。

我已经稍微了解了排序是如何正常进行的,但大多数实现似乎都依赖于 JTable 创建一个带有 Comparator 谓词的 javax.swing.RowSorter,或者依赖于维护一个在更改时触发事件的排序行列表。所以,我的问题:

ORM 框架不是这个问题的答案,因为数据不能很好地映射到实体对象。另外,我使用的 DBMS 是 H2。

编辑:不幸的是,基于应用比较器或对行对象排序谓词的可排序 JTable 库也不合适。我不相信我能够将所有对象保存在内存中以执行排序。这个问题使我无法使用 SwingX JXTables、GlazedLists 或类似的库。我希望我能,但我不能。时期。

** 我将处理数千行,可能是数百万行,以及许多列。是的,我确实需要使用 SQL 来进行排序和过滤。**

问题:(按重要性递减)

  1. 如何显示用于对行进行排序的列的指标?
  2. 当左键单击列标题以更改排序顺序时,如何让 JTable 触发适当的事件?
  3. 有没有更简单的方法可以在数据库更改时强制 JTable 更新?
  4. 是否有一个库可以使这一切变得相当容易(连接数据库查询或视图和 JTables)?
  5. 当我设计这样的系统时,我会遇到可怕的、可怕的问题吗?
0 投票
3 回答
3817 浏览

java - 在 DefaultCellEditor 派生实例完成其工作后更新单元格渲染器

我使用JTable具有自己的单元格渲染器和单元格编辑器的 a。

比如说,这个表包含 2 列和 x 行:
第一列包含一个布尔值,它自己的单元格渲染和单元格编辑器(一个单选按钮)
第二列包含一个字符串值,它自己的单元格渲染器:它在第一个当前行的列设置为 true(选中单选按钮)

编辑器正确更新了所有值,但是当单选按钮设置为 true 时,第二行不会变为粗体...
我必须检查不同行的单选按钮才能查看更改

我在哪里可以触发这些更改?

干杯并感谢您的帮助


RadiobuttonTableCellEditor.java

0 投票
4 回答
25391 浏览

java - 如何在 JTable 中隐藏(使不可见)行?

有什么办法吗?

0 投票
3 回答
870 浏览

java - JTable在单击时选择了错误的单元格

我在一个非常复杂的基于 Eclipse 的应用程序中工作,并且在 JSplitPane 中使用基于 JTable 的自定义组件存在问题。我实际上可以访问的应用程序部分是面板、选项卡内、面板内、实际应用程序内,所以有很多事情可能会出错。

我现在遇到的具体问题是,当我单击表格组件时,它选择了错误的单元格。如果我在第 0 行第 0 列中选择一个单元格,则实际选择的单元格位于第 2 行第 0 列,比实际点击低约 20 个像素。这只发生在表格位于 JSplitPane 中时:如果我只是将表格本身添加到面板中,则单元格选择是正确的。

在我看来,因为表格在 JSplitPane 中,表格的边界(或者可能包含表格的滚动窗格的视口?)在某处偏离了大约 20 个像素。我遇到的另一个可以支持这个理论的问题是,滚动表格会导致在表格上方重新绘制:例如,当我向下滚动时,它实际上是向上移动的,而不是表格滚动(在表格上方的组件上绘制) 滚动前大约 20 像素。我能够通过添加来解决这个问题

到包含表格的滚动窗格。

由于涉及到所有自定义组件,我实际上无法获得一个显示问题的小应用程序,但我有下一个最好的东西,它是一个显示我拥有的布局的应用程序(当然,它实际上并没有有同样的问题)。关于可能导致问题的任何想法?

0 投票
9 回答
280737 浏览

java - Java JTable设置列宽

我有一个 JTable,我在其中设置列大小如下:

这很好用,但是当表格最大化时,我在最后一列的右侧得到了空白空间。调整大小时是否可以将最后一列调整到窗口的末尾?

AUTO_RESIZE_LAST_COLUMN在文档中找到了属性,但它不起作用。

编辑:JTable是在JScrollPane它的首选大小设置。

0 投票
8 回答
54358 浏览

java - 如何在 jtable 单元格中换行?

我正在尝试按照本教程中的描述实现自定义 TableRenderer 。我想让渲染器对给定单元格长的每个文本进行换行。这个想法是,使用 TextArea 作为渲染器,因为它支持换行。但是,以下代码的行为与预期不同:

我将此渲染器设置为

但是单元格条目保持未包装。如果我添加this.setBackground(Color.YELLOW)到该getTableCellRendererComponent()方法中,所有单元格都是黄色的,但没有被包裹。

有任何想法吗?

更新:正如 Michael Borgwardt 在评论中所说,问题不是换行,而是行高:JTables 行是固定大小的,所以如果一个单元格越来越高(因为文本现在是多行的),我们必须增加行高。但是多少钱?我会检查这是否值得另一个 SO 问题。如果没有,我将在此处添加此解决方案。

Update2:以下代码将确定行高(如果放在 中getTableCellRendererComponent()):

0 投票
6 回答
5036 浏览

java - ClassCastException 的未知来源(在 JTables 中)

我目前正在重构JTable显示多种不同类型数据的 a 。这种重构的主要原因是有一些ClassCastExceptions(编写代码的作者/朋友暂停了),我似乎无法找到它们的来源。由于代码库很大,我不知道从哪里开始。有没有人有什么建议?我意识到这个问题的模棱两可并道歉!

我在下面包含了堆栈跟踪。谢谢!!

0 投票
8 回答
12235 浏览

java - JTable 中的页脚行

将页脚行放入 JTable 的最佳方法是什么?有没有人有任何示例代码可以做到这一点?

到目前为止,我想到的唯一方法是将一个特殊的行放入表模型中,该行总是排序到底部。


这是我最终得到的结果:

排序工作正常,但选择页脚行有点奇怪。

0 投票
3 回答
6851 浏览

java - 模拟 JTable 的 JavaFX 组件

我有一个大型数据集,需要向用户显示并JTableJavaFX.

0 投票
1 回答
2297 浏览

java - 在 RowSort 操作之后执行操作

我有一个JTable和一个TableRowSorter,我想在排序完成后执行一个操作。我一直在浏览网络,到目前为止,我的运气并不好。

最初我认为只是 aRowSorterListener可以解决问题,但不幸的是它在排序完成后不执行操作。

MouseListener在标题中添加 aJTable可能会起作用,但解决方案并不是非常优雅。

有没有人有任何想法?

非常感谢!


编辑(来自评论):以下内容被添加到TableModel扩展自定义类中的方法中AbstractTableModel。只要在自定义类JTable中设置/指定,就会调用此方法。TableModel