【发布时间】:2014-05-27 08:09:33
【问题描述】:
我在 JavaFX(具体来说是 2.2/Java 7)中有一个 TableView,其中每一列都是可排序的(实时排序)并且所有行/列都是可编辑的。例如,假设整个表格代表一个“订单”。表格中的每一行代表“订单行”,列代表“订单行”的属性,如“产品”、“数量”、“价格”等。用户可以添加、删除和编辑行(“订单”行”)如他所愿。
为了让用户界面不那么混乱,我想使用行选择,并确保一次只能编辑一行(因为排序会使当前编辑的值“跳跃”桌子)。我也有每个“订单行”的验证,这更容易对一行进行可视化,而不是单个列(例如,假设组合或产品 X 和数量 7 是非法的,因为产品 X 只能以单位订购5,我想突出显示 X 和值 7)。
可以轻松启用行选择。但是有没有实现行编辑的好方法? TableView 中的默认/内置编辑模式更像是 Excel,其中每一列都可以单独编辑、提交和验证,这不是我想要的。我想要文件资源管理器中的文件列表之类的东西。由于排序和验证,对已编辑行的所有编辑都必须立即提交给支持模型(TableView 的 items 属性)(即,对于单个列没有 onEditCommit),这一点很重要。
我之前在 Swing 中实现了类似的东西,然后最终使用了我命名的 ColumnList,它实际上是 List,但带有列标题和列,使它看起来像一个表格。在 JavaFX 中这也是一个可行的选择吗? TableColum 类似乎与 TableView 非常绑定,但我可能遗漏了一些东西。
我还知道 JavaFX 教程中的“地址簿”示例,该示例在表格下方具有行选择和编辑器字段。这是我目前在我的应用程序中实现的,但我希望编辑显示在当前选定的行中。因此,让编辑器出现在当前选定行的“顶部”或“内部”也是一种选择,如果有人能想出一种方法来实现这一点。
【问题讨论】:
-
是的,有一个好方法。是的,
TableColumn与TableView非常有界。看看这个Oracles tutorial 我想它解释了你需要的一切。 -
谢谢@brano!不过,我知道那个例子,但这并不是我真正想要的。我想要“内联”行编辑。但是,如果我可以使编辑文本字段出现在选定行内的表格“顶部”,它就可以工作。但我还没有找到一种方法来做到这一点......我会更新这个问题。
-
您希望表格行的所有文本字段同时可编辑吗?
-
@ItachiUchiha:是的,视觉上该行中的所有字段都应该是可编辑的(尽管从技术上讲,只有焦点编辑器必须是可编辑的)。然而,最重要的部分是由于排序/验证,所有编辑都必须立即提交给支持模型(即,单个列没有
onEditCommit)。我会再次更新。谢谢!