我有一个包含复选框的 JTable。我的应用程序的构建方式是,每当编辑任何条目时,背景都会发生变化,以显示条目处于编辑状态。我已经用鼠标设置了它,但是当添加一个 KeyListener 来捕捉键盘上按下空格时,keyReleased 方法仅在 Space 被按住更长时间时触发,并且复选框快速选择和取消选择。
当我使用 keyTyped 和 keyPressed 方法时,一切都很好,只是它落后了一步,因为输入到表中的新数据没有被捕获。
所以,我的问题是我怎样才能在桌子上按下空间时捕捉并收集桌子的所有当前值?
我正在使用 MVC 架构;这是我的控制:
public class UserInternalFrameController {
UserInternalFrame gui = new UserInternalFrame();
public UserInternalFrameController(ManagementGUI mainGui) {
gui.getTableUserTransactionPermissions().addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
System.out.println("typed");
// TODO Auto-generated method stub
if (e.getKeyChar() == ' ') {
if (stateMachine == 2 || stateMachine == 4) {
JTable permTable = gui.getTableUserTransactionPermissions();
int noOfColumns = gui.getUserTransactionPermissionsHeader().length;
permListEdit = false;
for (int i = 0; i < permList.length; i++) {
for (int j = 0; j < noOfColumns; j++) {
if (!permList[i][j].equals(permTable.getValueAt(i, j))) {
System.out.println("row" + i + "; column" + j + "; perList:" + permList[i][j] + "; transList: " + permTable.getValueAt(i, j));
permListEdit = true;
}
}
}
if ((employeeCodeEdit || usernameEdit || passwordEdit || userIdEdit || subjectIdEdit || userStatusEdit || userRoleEdit || permListEdit) == false) {
gui.getPanelUser().setBackground(defaultBackgroundPanelUser);
gui.getTableUserTransactionPermissions().setBackground(Color.WHITE);
stateMachine = 2;
gui.getBtnSave().setEnabled(false);
} else {
gui.getPanelUser().setBackground(Color.decode("#f5deb3"));
gui.getTableUserTransactionPermissions().setBackground(Color.decode("#f5deb3"));
stateMachine = 4;
gui.getBtnSave().setEnabled(true);
}
}
}
}
});
}
}
相同的代码块可以很好地与鼠标 actionListener 配合使用,并且在添加到 keyPressed 方法时具有相同的延迟效果。keyReleased 似乎适用于除空格以外的所有其他按钮。
我的键盘很好。
任何帮助将不胜感激。