セル選択時の選択状態表示の設定

広告

ここではJTableのセルをクリックした際にどのように選択状態表示されるかについて見ていきます。

JTableではテーブル内のセルをクリックした時に、デフォルトではクリックされたセルを含む行全体が選択状態になります。

JTableの適当な位置をクリック

今回はセルをクリックした際に、セルが含まれる列が選択状態になるようにしてみます。セルクリック時にそのセルが含まれる列が選択状態にするには、JTableで用意されている"setColumnSelectionAllowed"メソッドを使います。

このモデルの列を選択できるかどうかを設定します。 

パラメータ:
  columnSelectionAllowed - このモデルが列選択を許可する場合は true

引数に"true"を設定してこのメソッドを呼び出すことで、セルクリック時に列を選択状態にすることができます。

また同じようにセルクリック時にセルが含まれる行を選択状態にできるかどうかについても設定が可能です。セルクリック時にそのセルが含まれる行が選択状態にするかどうか設定するには、JTableで用意されている"setRowSelectionAllowed"メソッドを使います。

このモデルの行を選択できるかどうかを設定します。 

パラメータ:
  rowSelectionAllowed - このモデルが行選択を許可する場合は true

では一度試してみます。

import javax.swing.*;
import java.awt.event.*;
import java.awt.BorderLayout;
import java.awt.Dimension;

public class SwingTest extends JFrame{

  private String[][] tabledata = {
    {"日本", "3勝", "0敗", "1分"},
    {"クロアチア", "3勝", "1敗", "0分"},
    {"ブラジル", "1勝", "2敗", "1分"},
    {"オーストラリア", "2勝", "2敗", "0分"}};

  private String[] columnNames = {"COUNTRY", "WIN", "LOST", "EVEN"};

  public static void main(String[] args){
    SwingTest test = new SwingTest("SwingTest");

    test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    test.setVisible(true);
  }

  SwingTest(String title){
    setTitle(title);
    setBounds( 10, 10, 300, 200);

    JTable table = new JTable(tabledata, columnNames);
    table.setColumnSelectionAllowed(true);
    table.setRowSelectionAllowed(false);

    JScrollPane sp = new JScrollPane(table);
    sp.setPreferredSize(new Dimension(250, 100));

    JPanel p = new JPanel();
    p.add(sp);

    getContentPane().add(p, BorderLayout.CENTER);
  }
}

実行結果は下記のようになります。

列を選択状態にするサンプル

どこかのセルをクリックすると上記のように、そのセルが含まれる列が選択状態となります。

ちなみに行と列の両方を"true"に設定すると行と列が両方とも選択状態にならず、セルだけが選択状態になっているように見えます。

行と列を同時に選択可能にした場合のサンプル

上記の状態から"Ctrl"キーを押しながら他のセルをクリックしてみます。

行と列を同時に選択可能にした場合のサンプル

このように、何か変な表示となってしまいました。これが正しい動作なのかは現時点で分かりません。

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)