如何从 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 中的复选框中获取选中的值?的主要内容,如果未能解决你的问题,请参考以下文章

如何获取UIPickerView中选中的cell的值

c# DataGridView中,选中了多个行,如何获取选中的每一行的数据,或者每一行的索引?

如何从C#中获取ListView中选中某一行某一列的值

在winform中如何获取两个单选框中选中的那个值

Express 中的复选框

JS如何获取表单中复选框的值?