• 追加された行はこの色です。
  • 削除された行はこの色です。
#navi(../)
*JTableのセルにあるフォーカスを解除 [#m4aa474a]
>編集者:[[Terai Atsuhiro>terai]]~
作成日:2005-04-04~
更新日:&lastmod;
---
category: swing
folder: AnchorSelection
title: JTableのセルにあるフォーカスを解除
noindex: true
pubdate: 2005-04-04T03:22:43+09:00
description: 以下のコメントにあるように、Java 6以降でソートやclearSelectionすれば、選択状態やフォーカスは解除されるようになりました。

#contents
---
* 概要 [#summary]
以下のコメントにあるように、`Java 6`以降でソートや`clearSelection`すれば、選択状態やフォーカスは解除されるようになりました。このサンプルは意味が無くなったので削除し、代わりに`JTableHeader`をクリックした場合の例を[[JTableHeaderをクリックしてそのColumnのセルを全選択>Swing/ColumnSelection]]に作成しました。

**概要 [#a145f8ad]
JTableのセルにあるフォーカスをヘッダのクリックで解除します。
* コメント [#comment]
#comment
- `JDK 1.5.0_06`などにして試してみたところ、特別なことをしなくてもヘッダをクリックしてソートするとセルのフォーカスは外れるようです。 -- &user(aterai); &new{2006-01-13 (金) 16:07:44};
-- もう修正されているようなので、この記事は削除するか、別の内容に変更するかもしれません。[https://bugs.openjdk.org/browse/JDK-6195469 Bug ID: JDK-6195469 REGRESSION: Multiple interval selection is lost in JTable if mouse is dragged] -- &user(aterai); &new{2006-04-19 (水) 22:04:07};
- 移動したときに、日本語入力するには、どうしたらいいんですかね? -- &user(zero); &new{2006-03-09 (木) 20:19:17};
- 多分エクセルみたいな入力のことですよね。アルファベットならマウスで入力状態にしなくてもフォーカスがあるセルに直接入力できますが、`IME`が`on`の日本語入力モードの場合はうまくいかないようです。いまのところこれを簡単に行う方法は見つけられていません。 -- &user(aterai); &new{2006-03-09 (木) 23:09:26};

#screenshot

**サンプルコード [#eb1622f1]
 //table.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);
 table.getTableHeader().addMouseListener(new MouseAdapter() {
   public void mousePressed(MouseEvent e) {
     JTable table = ((JTableHeader)e.getSource()).getTable();
     if(table.isEditing()) {
       table.getCellEditor().stopCellEditing();
     }
     //table.getSelectionModel().clearSelection();
     //table.getSelectionModel().setAnchorSelectionIndex(-1);
     //table.getSelectionModel().setLeadSelectionIndex(-1);
     table.getColumnModel().getSelectionModel().setAnchorSelectionIndex(-1);
     table.getColumnModel().getSelectionModel().setLeadSelectionIndex(-1);
   }
 });

-&jnlp;
-&jar;
-&zip;

**解説 [#t5307cba]
ヘッダがマウスでクリックされた時に、列または行のSelectionModelを取得し、AnchorSelectionIndex(1.5.0系ではLeadSelectionIndexの設定も必要?)に範囲外の値を設定します。

以下の方法でも、選択をクリアできます。
 //1.5.0系ではsetAnchorSelectionIndex()が必要?
 table.changeSelection(table.getSelectedRow(),
                       table.getSelectedColumn(),
                       false, false);

//**参考リンク
**コメント [#m4d48b39]
- JDKを新しい1.5.0_06などにして試してみたところ、特別なことをしなくてもヘッダをクリックするとセルのフォーカスは外れるようです。 -- [[terai]] &new{2006-01-13 (金) 16:07:44};
- 移動したときに、日本語入力するには、どうしたらいいんですかね? -- [[zero]] &new{2006-03-09 (木) 20:19:17};

#comment