これまでに解決されていたのは申し訳ありませんが、解決策を探しましたが、関連するものが見つかりませんでした。私はこれを初めて知ったので、簡単な解決策につながったと思われる何かを完全に見落としたり無視したりする機会があります。Swing JTable - ShiftキーでKeyListenerの代わりにキーバインディングを使用
シフトキーのキーリスナーを実装しました。ユーザーがshiftキーを押すと、編集前にセルを正確に1行だけ入力します(以下のコードをご覧ください)。しかし、1つの問題があります。ユーザーが現在セルにデータを入力している場合、シフトキーは機能せず、デバッグ時にプログラムがキーリスナーに入ることもないことがわかります。この問題を解決するためにキーリスナーの代わりにキーバインディングを使用するように指示されています。私はチュートリアルのオンラインに従おうとしましたが、失敗したようです。どんな助けでも大変感謝します。ありがとうございます!
二つのキーリスナー(シフトはそうではないタブが、正常に動作します):うまくいけば問題はあまりにも愚かな、とかつてない
class ShiftAction extends AbstractAction{
public void actionPerformed(ActionEvent ae){
System.out.println("Shift");
table.editCellAt(table.getSelectedRow() + 1, table.getSelectedColumn());
table.setColumnSelectionInterval(table.getSelectedColumn(), table.getSelectedColumn());
table.setRowSelectionInterval(table.getSelectedRow() + 1, table.getSelectedRow() + 1);
}
}
shiftAction = new ShiftAction();
table.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_SHIFT,KeyEvent.SHIFT_DOWN_MASK),"doShiftAction");
table.getActionMap().put("doShiftAction",shiftAction);
:
table.addKeyListener(new KeyAdapter() {
@Override
public void keyReleased(KeyEvent e) {
//KeyCode 9 is a key code for the Tab key
if (e.getKeyCode() == 9) {
if(table.isCellEditable(table.getSelectedRow(),table.getSelectedColumn())) {
table.editCellAt(table.getSelectedRow(), table.getSelectedColumn());
} else {
table.editCellAt(table.getSelectedRow(), table.getSelectedColumn() + 1);
}
}
//The problem occurs here
//KeyCode 16 is a key code for the Shift key
if (e.getKeyCode() == 16) {
if(table.isCellEditable(table.getSelectedRow() + 1, table.getSelectedColumn())) {
table.editCellAt(table.getSelectedRow() + 1, table.getSelectedColumn());
table.setColumnSelectionInterval(table.getSelectedColumn(), table.getSelectedColumn());
table.setRowSelectionInterval(table.getSelectedRow() + 1, table.getSelectedRow() + 1);
} else {
table.editCellAt(table.getSelectedRow() + 1, table.getSelectedColumn() + 1);
table.setColumnSelectionInterval(table.getSelectedColumn() + 1, table.getSelectedColumn() + 1);
table.setRowSelectionInterval(table.getSelectedRow() + 1, table.getSelectedRow() + 1);
}
}
}
});
は、ここに私の未遂(失敗した)ソリューションです再び、事前に感謝します。
"この問題を解決するためにキーリスナーの代わりにキーバインディングを使用するように言われました。"彼らに尋ねなさい。あなたの問題を解決することはできませんが、あなたの問題を増やすことはありません。(あなたが今見ているように) – gpasch
私はJavaのインストラクターによって、私を助ける時間があまりないと言われました。私はプロジェクトを終了しなければならない)。それはそれほど大きな契約ではありません。私はそれをそのまま残しておくことができます。これは私のための学習体験の多くです。 –
@gpasch、はい、Key Bindingsが優れたソリューションです。これはより新しい、より優れたAPIであり、焦点の問題に取り組んでいます。 – camickr