TITLE:JTableのセル編集を入力モード中からでも可能にする

JTableのセル編集を入力モード中からでも可能にする

Posted by terai at 2008-06-23

概要

IMEが直接入力以外で、一時ウィンドウが表示されていても、入力確定でセル編集を開始します。

  • &jnlp;
  • &jar;
  • &zip;

#screenshot

サンプルコード

JTable table = new JTable(model) {
  @Override
  protected boolean processKeyBinding(KeyStroke ks, KeyEvent e, int condition, boolean pressed) {
    boolean retValue = super.processKeyBinding(ks, e, condition, pressed);
    //if(!check.isSelected()) return retValue;
    if(KeyStroke.getKeyStroke('\t').equals(ks) || KeyStroke.getKeyStroke('\n').equals(ks)) {
      System.out.println("tab or enter typed");
      return retValue;
    }
    if(getInputContext().isCompositionEnabled() && !isEditing() &&
       !pressed && !ks.isOnKeyRelease()) {
      int selectedRow = getSelectedRow();
      int selectedColumn = getSelectedColumn();
      if(selectedRow!=-1 && selectedColumn!=-1 && !editCellAt(selectedRow, selectedColumn)) {
        return retValue;
      }
    }
    return retValue;
  }
};
//table.setSurrendersFocusOnKeystroke(true);

解説

上記のサンプルでは、以下のような設定になっています。

  • タブやエンターキーでのセルフォーカス移動では編集開始しない
  • JTable#processKeyBindingをオーバーライドして、入力モードが確定したら選択セルの編集開始

IMEが変換中かどうかは、Component#getInputContext#isCompositionEnabledメソッドで判断しています。

コメント