gpt4 book ai didi

java - JTable 中的单元格编辑问题

转载 作者:太空宇宙 更新时间:2023-11-04 07:12:56 26 4
gpt4 key购买 nike

我在 JTable 中编辑单元格时遇到一些问题。

首先,我创建了一个函数,用于在按下 ENTER 时处理水平滚动,并且当它到达最后一列时,它会再次从下一列中的第一个单元格开始。这很好用,但问题是,当我单击一个单元格并使其可编辑时,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);

最佳答案

the problem is that, when I click in a cell and make it editable then ENTER doesn't trigger the Action (I have to push it twice, once for stop editing and second one for start editing the next cell). It only recognize ENTER pressed when cell is selected (only the first time). After this, Action is always triggered when I continue pressing ENTER even cell is editable

您遇到编辑器组件焦点问题。

  1. 当您使用鼠标双击单元格时,单元格编辑器将获得焦点,任何使用按键的输入都会得到反射(reflect),并且按 Enter 键将被编辑器组件接收,但不会被表格接收。

  2. 对于第二种情况,当您在选定的行上按 Enter 键(但编辑器尚未显示)时,表格本身会监听 Enter 键,按您编码的方式显示编辑器,任何按键都会反射(reflect)在编辑器上,当您再次单击 Enter 时,表格会收到它,停止编辑并转到下一个单元格。

作为解决方案,您可以声明自定义单元格编辑器并实现 ActionListeneractionPerformed 函数以响应预期行为。检查demo exampletutorial page example了解实现思路和细节。

关于java - JTable 中的单元格编辑问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20380212/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com