我有一个使用自定义 TableModel 的 JTable。我扩展了 AbstractCellEditor 类,当我双击文本字段时,单元格正确显示了输入到文本字段中的文本。但是当我单击选择表格中的单元格并开始输入时,文本字段会收到文本,但是当我按下回车键时,它不会更新文本字段。我在文本字段上附加了一个焦点侦听器以进行故障排除,发现当我双击该字段时它只会获得和失去焦点。通过单击它不会获得焦点(即使它允许我编辑它)。这让我大吃一惊!我已经尝试过textField.grabFocus()
,textField.requestFocusInWindow()
和各种其他的东西。有什么建议么?谢谢!
public class IndexerCellEditor extends AbstractCellEditor implements
TableCellEditor {
private JTextField textField;
private RecordValue currentValue;
public IndexerCellEditor(){
textField = new JTextField();
}
@Override
public boolean isCellEditable(EventObject e){
if(e instanceof MouseEvent){
return ((MouseEvent)e).getClickCount() >= 2;
}
return true;
}
@Override
public Object getCellEditorValue() {
return currentValue;
}
@Override
public Component getTableCellEditorComponent(JTable table, Object value,
boolean isSelected, int row, int column) {
textField.setBorder(BorderFactory.createLineBorder(Color.black, 1));
currentValue = (RecordValue) value;
textField.setText(currentValue.getValue());
textField.addFocusListener(new FocusListener(){
@Override
public void focusGained(FocusEvent e) {
System.out.println("focus gained");
}
@Override
public void focusLost(FocusEvent e) {
System.out.println("focus lost");
}
});
textField.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
currentValue.setValue(((JTextField)e.getSource()).getText());
fireEditingStopped();
}
});
return textField;
}
}