【问题标题】:JTable and MySQL IssueJTable 和 MySQL 问题
【发布时间】:2013-06-19 03:57:03
【问题描述】:

我不确定为什么我的代码不能正常运行,它可能很容易修复,但我想从页面获取输入,我收到一个错误,指出所选项目无法转换为这种情况下选择的列

void delete() throws SQLException{
    int input = JOptionPane.showConfirmDialog(null, "Are you sure you want to delete?", "Delete", JOptionPane.YES_NO_OPTION);
    if (input == JOptionPane.YES_OPTION) {
        DVDItem user = (DVDItem)tableDVD.getModel().getValueAt(tableDVD.getSelectedRow(), tableDVD.getSelectedColumn());
        mc.deleteItem(user.getkey());
    }
    updateList();
}

如何制作它以便将其转换为 DVDItem 对象,然后通过访问其密钥来删除,谢谢

【问题讨论】:

  • 我假设该列包含DVDItem 的值或属性。相反,您应该向模型询问行的表示,这将取决于您使用的表模型类型...
  • 我不太明白,我的意思是逻辑上将行的整个值传递给对象是有意义的,但我该怎么做呢?
  • 你是如何构建原始表格模型的?默认情况下,TableModel 不对行的定义方式做出任何假设
  • 这是我的表声明tableDVD = new JTable(); tableDVD.setModel(new DefaultTableModel( new Object[][] { }, new String[] { "KEY", "Title", "Director", "Genre", "Date" } ));

标签: java mysql swing jtable


【解决方案1】:

我的意思是从逻辑上讲,将行的整个值传递给对象是有意义的,但我该怎么做呢?

DefaultTableModel 包含一行中每一列的单独对象。您不能只是神奇地创建 DVDItem。因此 getValueAt() 方法将返回给定行/列的对象。它返回的 Object 取决于您添加到模型中的值。

如果您想将 DVDItem 对象添加到模型中,那么您需要创建一个自定义模型。查看Bean Table Model。您可以按原样使用 BeanTableModel,也可以通过实现几个方法来扩展 RowTableModel。选择权在你。

【讨论】:

  • DVDItem 类由 4 个字符串和一个 int 组成,因此每个 jtable 列都相应地保存这些值,我想选择一行并获取所有这些字段来创建一个 DVDItem 对象,我可以对其进行操作以更新数据库表,如果我很固执或没有得到这个信息,我很抱歉,但我只需要将 dvdiitem 对象传递给另一个类来操作它,我可能会让每个人都感到困惑
  • 因此,您可以在模型中创建一个存储 DVDItem 对象。这就是 RowTableModel 的设计目的。或者您使用 DefaultTableModel 并将数据存储为单独的字段。然后,当您要创建 DVDItem 时,您需要调用 model.getValueAt(...) 5 次。所选行中的每一列对应一个。
  • 所以 DVDItem 将是行中值的数组?我试试看谢谢!!!
  • 我调用了 dvdItem 的构造函数并用适当的列填充了每个插槽,它现在可以工作了,谢谢!!
猜你喜欢
  • 2013-01-01
  • 1970-01-01
  • 2013-03-10
  • 1970-01-01
  • 1970-01-01
  • 2017-03-06
  • 2011-09-08
  • 2012-04-26
  • 1970-01-01
相关资源
最近更新 更多