如何从 jtable 中的复选框中获取选中的值?
Posted
技术标签:
【中文标题】如何从 jtable 中的复选框中获取选中的值?【英文标题】:How to fetch checked values from check boxes in jtable? 【发布时间】:2014-10-25 08:51:18 【问题描述】:我有名为“tableEarnings”的 JTable,它由 3 列组成:
检查 收益 说明 和一个 jButton“检查”列中的每个单元格都有一个复选框。我需要从JTable
获取检查过的“收入”和“描述”单元格的值,并在单击jButton
时将其存储到数据库中
请帮帮我
这是我的按钮监听器代码:
private void btnOKActionPerformed(java.awt.event.ActionEvent evt)
//System.out.println("table"+tableEarnings.getModel().getRowCount());
for (int i = 0; i < tableEarnings.getModel().getRowCount()+1; i++)
if ((Boolean) tableEarnings.getModel().getValueAt(i, 0))
System.out.println("Value" + tableEarnings.getValueAt(i, 1));
break;
【问题讨论】:
使用 getValueAt 获取数据 如何遍历检查的值? @jiplin 如果你已经尝试过,请发布它 @Jipin Gopi 1.如何遍历检查的值? - 使用 getValueAt 获取数据,2. getValueAt 中的事件,输出到数据库应该重定向到 SwingWorker,3. 布尔值存储在 JTable 中代表 JChechBox 的模型中,4. Oracle 官方教程中关于 JTable 的所有内容,包括。工作代码示例 示例here 和here。 【参考方案1】:循环遍历表模型时存在三个简单的错误:
i
变量的上限应该是行数 - 1。否则您可能会遇到异常(即:ArrayIndexOutOfBoundsException
,如果您的表模型是 DefaultTableModel
)
如果您找到 true
布尔值,则不要 break
循环。通过这样做,您会丢失所有比i
索引更远的行。
您将调用getValueAt()
的值直接打印在表(视图)而不是模型上。如果您的表已排序或列已重新排序,这可能无法检索到正确的值。始终保持一致性。在这种情况下,您应该使用模型。
例如:
private void btnOKActionPerformed(java.awt.event.ActionEvent evt)
TableModel model = tableEarnings.getModel();
for (int i = 0; i < model.getRowCount() - 1; i++)
if ((Boolean) model.getValueAt(i, 0))
System.out.println("Value" + model.getValueAt(i, 1));
现在您可以打印这些值了。
如果一切顺利,您现在就有了在数据库中插入行的基础。但请注意,数据库调用是耗时的任务,可能会阻塞Event Dispatch Thread (EDT),导致 GUI 无响应。 EDT 是一个单一且特殊的线程,Swing 组件在其中创建和更新。为避免阻塞此线程,请考虑使用SwingWorker 在后台线程中执行数据库调用并更新 EDT 中的 Swing 组件。在Concurrency in Swing 课程中查看更多信息。
【讨论】:
感谢 Dic 。但是在检查第二个索引时再次显示异常 能否编辑您的问题,包括例外情况? @JipinGopi以上是关于如何从 jtable 中的复选框中获取选中的值?的主要内容,如果未能解决你的问题,请参考以下文章