当选择给定单元格时,所需行为类似于Excel中提供的镜像文本编辑字段,从而允许更多空间查看单元格的内容。我有一个5列和n行的JTable。第2列包含可以任意长的表达式,因此我想提供一个单独的JTextField来处理每行表达单元格的内容。其他字段可在表格中直接编辑。但是,当用户单击第2列中的字段时,我想将它们发送到文本字段。单元格中预先存在的任何内容都应出现在文本字段中,文本字段中的其他编辑应在表格单元格中进行镜像。同样,如果有人双击单元格并直接编辑它,我希望这些更改反映在文本字段中。因此,用户可以选择在任一空间中编辑并更新两者。理想情况下,它们会在每次击键时更新,但在返回时更新是可以接受的。
所以,我已经得到了JTable,TableModel,TableModelListener,JTextField,ListSelectionListener和AbstractAction,它们共同提供了上述大部分功能。我错过了直接表格单元格编辑到文本字段和每个键盘更新的反映。
他们的想法是如何最好地构建这种行为的?
答案 0 :(得分:2)
好吧,如果你想从表到获取数据,那么你将代码添加到你的TableModel的setValueAt()函数中,该函数应该在用户运行时运行更改可编辑单元格中的内容。我不认为这会更新每次击键。
如果要将数据从移动到文本框到,表格单元格会使用这样的代码
myJTextField.getDocument().addDocumentListener(new MyDocumentListener());
MyDocumentListener
是javax.swing.event.DocumentListener
接口
将为您提供从框到表格的每次击键更新。但另一方面,它有点棘手。
有两种方法可以做到这一点
1)向表中添加一个键监听器,当用户开始键入时,检查以查看哪个表元素处于活动状态,并在键入时拦截击键。不过,这有点混乱。
2)另一种选择可能是尝试获取或替换表正用于实际让用户进行更改的组件。我认为JTable实际上允许你改变编辑器组件,如果你四处寻找。