Java 如何跨表格单元格和文本字段镜像编辑

Java 如何跨表格单元格和文本字段镜像编辑,java,events,jtable,jtextfield,Java,Events,Jtable,Jtextfield,选择给定单元格时,所需的行为类似于Excel中提供的镜像文本编辑字段,允许更多空间查看单元格内容。我有一个5列n行的JTable。第2列包含可以任意长的表达式,因此我想提供一个单独的JTextField来编辑每行表达式单元格的内容。其他字段在表中可直接编辑。但是,当用户单击第2列中的字段时,我想将它们发送到文本字段。单元格中预先存在的任何内容都应显示在文本字段中,文本字段中的其他编辑应反映在表格单元格中。同样,如果有人双击单元格并直接编辑它,我希望这些更改反映在文本字段中。因此,用户可以选择在任

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

到目前为止,我已经有了JTable、TableModel、TableModelListener、JTextField、ListSelectionListener和AbstractAction,它们共同提供了上述大部分功能。我缺少对文本字段和每个keystoke更新的直接表单元格编辑的反映


他们对如何最好地构造这种行为有何想法?

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

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

myJTextField.getDocument().addDocumentListener(new MyDocumentListener());
其中
MyDocumentListener
javax.swing.event.DocumentListener
接口的实现

这将使您每次击键都从框更新到表。但从另一方面来说,这有点棘手

有两种方法可以让你做到这一点

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


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

谢谢你,查德。使用DocumentListener和设置DefaultCellEditor为我提供了我想要的所有功能。