• 追加された行はこの色です。
  • 削除された行はこの色です。
TITLE:JTableHeaderをクリックしてそのColumnのセルを全選択
#navi(../)
RIGHT:Posted by &author(aterai); at 2005-04-04
*JTableHeaderをクリックしてそのColumnのセルを全選択 [#e735902b]
JTableHeaderをクリックしたとき、そのColumn以下にあるセルを全選択します。
---
category: swing
folder: ColumnSelection
title: JTableHeaderをクリックしてそのColumnのセルを全選択
tags: [JTable, JTableHeader, MouseListener]
author: aterai
pubdate: 2005-04-04T03:22:43+09:00
description: JTableHeaderをクリックしたとき、そのColumn以下にあるセルを全選択します。
image: https://lh4.googleusercontent.com/_9Z4BYR88imo/TQTJrC8DyhI/AAAAAAAAAUw/SO1wMAudBiE/s800/ColumnSelection.png
---
* 概要 [#summary]
`JTableHeader`をクリックしたとき、その`Column`以下にあるセルを全選択します。

-&jnlp;
-&jar;
-&zip;
#download(https://lh4.googleusercontent.com/_9Z4BYR88imo/TQTJrC8DyhI/AAAAAAAAAUw/SO1wMAudBiE/s800/ColumnSelection.png)

//#screenshot
#ref(http://lh4.ggpht.com/_9Z4BYR88imo/TQTJrC8DyhI/AAAAAAAAAUw/SO1wMAudBiE/s800/ColumnSelection.png)

**サンプルコード [#va7d85c3]
* サンプルコード [#sourcecode]
#code(link){{
table = new JTable(model) {
  private final Color evenColor = new Color(250, 250, 250);
  @Override
  public Component prepareRenderer(TableCellRenderer tcr, int row, int column) {
    Component c = super.prepareRenderer(tcr, row, column);
    if(isCellSelected(row, column)) {
      c.setForeground(getSelectionForeground());
      c.setBackground(getSelectionBackground());
    }else{
      c.setForeground(getForeground());
      c.setBackground((row%2==0)?evenColor:getBackground());
    }
    return c;
  }
};
JTable table = new JTable(model);
table.setCellSelectionEnabled(true);
final JTableHeader header = table.getTableHeader();
JTableHeader header = table.getTableHeader();
header.addMouseListener(new MouseAdapter() {
  public void mousePressed(MouseEvent e) {
    if(!check.isSelected()) return;
    if(table.isEditing()) {
  @Override public void mousePressed(MouseEvent e) {
    if (!check.isSelected()) {
      return;
    }
    if (table.isEditing()) {
      table.getCellEditor().stopCellEditing();
    }
    int col = header.columnAtPoint(e.getPoint());
    table.changeSelection(0, col, false, false);
    table.changeSelection(table.getRowCount()-1, col, false, true);
    table.changeSelection(table.getRowCount() - 1, col, false, true);
  }
});
}}

**解説 [#fe0efc44]
上記のサンプルでは、JTableHeaderにマウスリスナーを追加し、JTableHeader#columnAtPoint(Point)メソッドを使って、クリックされたColumnを取得するようになっています。
* 解説 [#explanation]
上記のサンプルでは、`JTableHeader`に`MouseListener`を追加し、`JTableHeader#columnAtPoint(Point)`メソッドを使ってマウスでクリックされた位置にある`TableColumn`を取得しています。

Column全体の選択は、changeSelectionメソッドを二回使用することで行っています。
- `TableColumn`全体の選択は`changeSelection`メソッドを`2`回使用することで実現している

**参考リンク [#b7494229]
-[[JTableに行ヘッダを追加>Swing/TableRowHeader]]
--行ヘッダをクリックして行の全選択
* 参考リンク [#reference]
- [[JTableに行ヘッダを追加>Swing/TableRowHeader]]
-- 行ヘッダをクリックして行の全選択

**コメント [#j69c8557]
* コメント [#comment]
#comment
- メモ: `2008-03-11`に[[JTableのセルにあるフォーカスを解除>Swing/AnchorSelection]]から移動でこのページを作成。 -- &user(aterai); &new{2013-02-20 (水) 15:21:27};

#comment