【发布时间】:2013-12-04 16:07:35
【问题描述】:
我在 JTable 中编辑单元格时遇到了一些问题。
首先,我创建了一个函数来处理按下 ENTER 时的水平滚动,当它到达最后一列时,它会从下一列的第一个单元格重新开始。这很好用,但问题是,当我单击一个单元格并将其设置为 editable 时,ENTER 不会触发操作(我必须按两次,一次用于停止编辑,第二次用于开始编辑下一个单元格)。它仅在选择单元格时识别按下 ENTER(仅第一次)。在此之后,当我继续按 ENTER 时,即使单元格是可编辑的,也会触发动作。
另一方面,我有一个单元格侦听器,用于在编辑某些单元格时执行一些操作,但在按下 ENTER 时它总是会触发两次。
那么,有什么建议吗?我希望我已经清楚地解释了这一点。
datosTabla = new Object[10][columnas_tabla.length];
modelo = new DefaultTableModel(datosTabla, columnas_tabla);
tabla = new JTable(modelo);
CellEditorListener changeNotification = new CellEditorListener() {
public void editingCanceled(ChangeEvent e) {
}
public void editingStopped(ChangeEvent e) {
System.out.println("Do stuff");
}
};
tabla.getDefaultEditor(Object.class).addCellEditorListener(changeNotification);
Action handleEnter = new AbstractAction() {
public void actionPerformed(ActionEvent e) {
int row = tabla.getSelectedRow();
int col = tabla.getSelectedColumn();
if (col < modelo.getColumnCount() - 1){
col++;
} else {
row++;
col = 0;
}
tabla.changeSelection(row, col, false, false);
tabla.editCellAt(row, col);
}
};
tabla.getInputMap().put(KeyStroke.getKeyStroke("ENTER"), "handleEnter");
tabla.getActionMap().put("handleEnter", handleEnter);
【问题讨论】:
标签: java swing jtable tablecelleditor celleditorlistener