0

所需的行为类似于选择给定单元格时 Excel 中提供的镜像文本编辑字段,从而允许更多空间查看单元格的内容。我有一个 5 列和 n 行的 JTable。第 2 列包含可以任意长的表达式,因此我想提供一个单独的 JTextField 以用于编辑每行表达式单元格的内容。其他字段可在表中直接编辑。但是,当用户单击第 2 列中的字段时,我想将它们发送到文本字段。单元格中预先存在的任何内容都应显示在文本字段中,并且文本字段中的其他编辑应反映在表格单元格中。同样,如果有人双击单元格并直接对其进行编辑,我希望这些更改反映在文本字段中。因此,用户可以选择在任一空间进行编辑,并且两者都会更新。理想情况下,它们会在每次击键时更新,但在点击返回时更新是可以接受的。

所以,到目前为止,我已经获得了 JTable、TableModel、TableModelListener、JTextField、ListSelectionListener 和 AbstractAction,它们一起工作以提供上述大部分功能。我错过了直接表单元格编辑对文本字段和每个按键更新的反映。

他们的想法是关于如何最好地构建这种行为吗?

4

1 回答 1

2

好吧,如果您想表格中获取数据单元格,那么您可以将代码添加到 TableModel 的 setValueAt() 函数中,该函数应该在用户更改可编辑单元格中的内容时运行。我不认为这会更新每次击键。

如果要将数据文本框移动表格单元格,请使用如下代码

myJTextField.getDocument().addDocumentListener(new MyDocumentListener());

接口MyDocumentListener的实现在哪里javax.swing.event.DocumentListener

将使您从 box 到 table 的每次击键更新。但反过来,它有点棘手。

有两种方法你可以去做

1) 向表中添加按键侦听器,当用户开始键入时,检查哪些表元素处于活动状态,并在他们键入时截取击键。不过,这有点乱。

2)另一种选择可能是尝试抓取或替换表格正在使用的组件以实际让用户进行更改。我认为 JTable 实际上允许您在深入研究时更改编辑器组件。

于 2010-01-18T07:42:39.137 回答