Swing/CompositionEnabled のバックアップの現在との差分(No.1)
TITLE:JTableのセル編集を入力モード中からでも可能にする
JTableのセル編集を入力モード中からでも可能にする
Posted by terai at 2008-06-23- category: swing folder: CompositionEnabled title: JTableのセル編集を文字入力変換中からでも可能にする tags: [JTable, InputContext] author: aterai pubdate: 2008-06-23T13:43:43+09:00 description: IMEが直接入力以外で、一時ウィンドウが表示されていても、入力確定でセル編集を開始します。 image:
概要
IME
が直接入力以外で、一時ウィンドウが表示されていても、入力確定でセル編集を開始します。
Screenshot
Advertisement
概要
IMEが直接入力以外で、一時ウィンドウが表示されていても、入力確定でセル編集を開始します。- &jnlp;
- &jar;
- &zip;
#screenshot
サンプルコード
#spanend
#spanadd
* サンプルコード [#sourcecode]
#spanend
#spanadd
#code(link){{
#spanend
JTable table = new JTable(model) {
@Override
protected boolean processKeyBinding(KeyStroke ks, KeyEvent e, int condition, boolean pressed) {
@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)) {
// 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()) {
if (getInputContext().isCompositionEnabled() && !isEditing() &&
!pressed && !ks.isOnKeyRelease()) {
int selectedRow = getSelectedRow();
int selectedColumn = getSelectedColumn();
if(selectedRow!=-1 && selectedColumn!=-1 && !editCellAt(selectedRow, selectedColumn)) {
if (selectedRow != -1 && selectedColumn != -1 &&
!editCellAt(selectedRow, selectedColumn)) {
return retValue;
}
}
return retValue;
}
};
#spandel
//table.setSurrendersFocusOnKeystroke(true);
#spanend
#spanadd
// table.setSurrendersFocusOnKeystroke(true);
#spanend
解説
上記のサンプルでは、以下のような設定になっています。- タブやエンターキーでのセルフォーカス移動では編集開始しない
- JTable#processKeyBindingをオーバーライドして、入力モードが確定したら選択セルの編集開始
解説
- TabやEnterキーでのセルフォーカス移動では編集開始しない
-
JTable#processKeyBinding(...)
メソッドをオーバーライドして入力モードが確定したら選択セルの編集開始 - インプットメソッドが起動中かどうかは
Component#getInputContext#isCompositionEnabled()
メソッドで判断可能