gpt4 book ai didi

java - 如何从jtable中的复选框中获取选中的值?

转载 作者:行者123 更新时间:2023-12-01 22:38:23 25 4
gpt4 key购买 nike

我有一个名为“tableEarnings”的 JTable,它由 3 列组成:

  • 检查
  • 收入
  • 描述和一个
  • jButton

“检查”列中的每个单元格都有一个复选框。我需要从 JTable 获取“Earnings”和“Description”单元格的选中值,并在单击 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;
}
}
}

最佳答案

在表模型上进行迭代的循环中存在三个简单的错误:

  1. i 变量的上限应该是行数 - 1。否则,如果您的表模型是 ,您可能会遇到异常(即:ArrayIndexOutOfBoundsException) >默认表模型)

  2. 如果找到 true boolean 值,则不要中断循环。通过这样做,您将丢失比 i 索引更远的所有行。

  3. 您正在直接在表( View )而不是模型上打印调用 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教训。

关于java - 如何从jtable中的复选框中获取选中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26560733/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com