チェックボックスを含む JTable があります。私のアプリケーションは、エントリが編集されるたびに背景が変化して、エントリが編集状態であることを示すように構築されています。マウスで設定済みですが、KeyListener を追加してキーボードのスペースが押されたときにキャッチすると、キーリリース メソッドはスペースが長く押されたときにのみ起動し、チェックボックスの選択と選択解除がすばやく行われます。
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 は、スペースを除く他のすべてのボタンでうまく機能するようです。
私のキーボードは大丈夫です。
どんな助けでも大歓迎です。