JTableのセルにあるフォーカスを解除

編集者:Terai Atsuhiro
作成日:2005-04-04
更新日:2015-03-17 (火) 18:44:01

概要

JTableのセルにあるフォーカスをヘッダのクリックで解除します。

#screenshot

サンプルコード

//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;

解説

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

以下の方法でも、選択をクリアできます。

//1.5.0系ではsetAnchorSelectionIndex()が必要?
table.changeSelection(table.getSelectedRow(),
                      table.getSelectedColumn(),
                      false, false);

コメント

  • JDKを新しい1.5.0_06などにして試してみたところ、特別なことをしなくてもヘッダをクリックするとセルのフォーカスは外れるようです。 -- terai