【问题标题】:Is a custom TableCellEditor constructor only called once?自定义 TableCellEditor 构造函数是否只调用一次?
【发布时间】:2015-08-20 18:46:42
【问题描述】:

我有一个 JTable。 JTable 中的一列被分配了一个扩展的 TableCellEditor,它显示了一个扩展的 JComboBox。

有 100 个字符串对象的固定列表填充组合框。

挑战:

  • 设计 JComboBoxes 以便任何选择相对于其他框是唯一的?也就是说,如果从第一行的组合框中选择了“A”,它会自动从其他组合框的列表中删除。
  • 将新房间添加到表格时,它包含的组合框应自动填充到第一个可用列表项。

问题: 我的组合框工作得很好。我可以随意选择项目。我什至在从列表中删除已经使用过的项目方面取得了一些进展。但我不知道如何正确地自动填充。

我很困惑,因为我的组合框构造函数似乎只在创建表时调用一次,而不是每行一次。

是这样吗? TableCellEditor 的构造函数是否只调用一次?如果是这样,我该如何修改每个组合框的行为?

感谢您的帮助!

如果您需要特定代码,请告诉我。不知道你要不要我把整个类都粘贴进去。

【问题讨论】:

  • 我们不想要您的整个代码库。如果你能用尽可能少的类和方法做一个简短的例子来说明问题,那将是一个很大的帮助。
  • Is the constructor for a TableCellEditor only called once ever? - 任何对象的构造函数只在创建对象时调用一次。 my combobox constructor is only called once when the table is created, not once for each row. - 使用编辑器和渲染器的要点是类由表共享,以尽量减少创建的对象数量。

标签: java swing combobox jtable tablecelleditor


【解决方案1】:

当一个新房间被添加到表中时,它包含的组合框应该自动填充到第一个可用的列表项。

当您向 TableModel 添加新的数据行时,您必须添加该行中所有列的值。这不应该是编辑器的功能。编辑器允许您更改单元格中的值。

【讨论】:

    【解决方案2】:

    我能够通过为我的组合框创建一个抽象超类来解决我的问题,当它设置数据时可以从 tablemodel 扩展中访问它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-18
      • 2016-12-21
      • 2013-12-11
      • 1970-01-01
      • 2022-07-05
      相关资源
      最近更新 更多