第4回:JFaceのGUIコンポーネント (3/4)

Eclipse実践プラグイン開発
Eclipse実践プラグイン開発

第4回:JFaceのGUIコンポーネント
著者:ビーブレイクシステムズ  大森 洋行   2005/7/25
前のページ  1  2  3   4  次のページ
STEP3:選択したセルの編集

   STEP2まででセルの編集はできるようになりましたが、一番左のカラムで行を選択して、その後セルを選択するといった仕様になっているため操作性が悪いです。そこでSTEP3では、セルの選択で直接編集できるようにします。

   セル選択による編集の切り替えを行うためには、テーブル上でのマウスイベントからクリックされたセルを特定し、editElement()メソッドで編集モードをオンにするといったマウスアダプタが必要になります。
⁄**
 * TableViewerのセル選択時の処理を行うクラス
 *⁄
class TestResultTableMouseAdapter extends MouseAdapter {

   private TableViewer viewer_;

   public TestResultTableMouseAdapter(TableViewer viewer){
      viewer_ = viewer;
   }

   ⁄**
    * マウスクリック時の処理
    *
    * クリックされたセルを特定し、編集モードに切り替える
    *⁄
   public void mouseDown(MouseEvent e) {
     int x = e.x;
     int y = e.y;
     Table messageTable = (Table)e.getSource();

     ⁄⁄ クリックされたポイントからテーブルアイテムを取得
     Point clickPoint = new Point(x, y);

     Table table = viewer_.getTable();
     int startRowNum = table.getTopIndex();
     int endRowNum = table.getItemCount();
     int columnCount = table.getColumnCount();

     TableItem targetItem = null;
     int columnIndex = 0;
     ⁄⁄ 行でループ
     for (int rowCnt = startRowNum; rowCnt < endRowNum; rowCnt++) {
         TableItem item = table.getItem( rowCnt);
         ⁄⁄ 列でループ
         for (int j = 0; j              Rectangle rect = item.getBounds(j);
             ⁄⁄ クリックされたセルを特定する
             if (rect.contains(clickPoint)) {
                 columnIndex = j;
                 targetItem = item;
                 break;
             }
         }
     }

     ⁄⁄ 編集モードをオンにする
     if (targetItem != null) {
         int rowIndex = messageTable.indexOf(targetItem);
         viewer_.editElement(targetItem.getData(), columnIndex);
     }
  }
}

   マウスアダプタが完成したら、テーブルのリスナーとして登録します。

⁄⁄ マウスアダプタの設定
testResultTable.addMouseListener(new TestResultTableMouseAdapter(testResultViewer));

   以上で、セル選択による編集の切り替えができるようになります。

STEP3のソースコード
Text  step3.zip
  (ZIPファイル/5.12KB)
STEP4:ソート

   次に、カラムヘッダの選択によるデータのソート機能を追加します。

   テーブルでソート機能を実現するには、ViewerSorterを継承して並び替えのルールを実装します。



package table_viewer;

import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerSorter;

⁄**
 * MessageTableSorter
 *
 * テーブルのソート処理を行うクラス
 *⁄
public class TestResultSorter extends ViewerSorter {
   ⁄⁄ 並び替えのタイプ
   public static final int SORT_TYPE_UP = 1;
   public static final int SORT_TYPE_DOWN = 2;

   ⁄⁄ 並び替え対象を識別するキー
   public static final int SORT_BY_ID = 0;
   public static final int SORT_BY_NAME = 1;
   public static final int SORT_BY_ENGLISH_SCORE = 2;
   public static final int SORT_BY_MATHEMATICS_SCORE = 3;
   public static final int SORT_BY_JAPANESE_SCORE = 4;
   public static final int SORT_BY_EVALUATION = 5;

   public int sortType_ = SORT_TYPE_UP;

   public int sortKey_ = SORT_BY_ID;

   ⁄**
    * 並び替えタイプ(昇順or降順)の設定
    *⁄
   public void setSortType(int sortType) {
     sortType_ = sortType;
   }

   ⁄**
     * 並び替えタイプの取得
     *⁄
   public int getSortType() {
     return sortType_;
   }

   ⁄**
    * 並び替え対象列の設定
    *⁄
   public void setColumnIndex(int sortKey) {
     sortKey_ = sortKey;
   }

   ⁄**
    * 並び替えルール
    *⁄
   public int compare(Viewer viewer, Object e1, Object e2) {
      TestResult result1 = (TestResult)e1;
      TestResult result2 = (TestResult)e2;

      ⁄⁄ ソートのキーごとに処理を分岐
      if (sortKey_ == SORT_BY_ID) {
          Integer id1 = new Integer(result1.getId());
          Integer id2 = new Integer(result2.getId());

          if (sortType_ == SORT_TYPE_UP) {
              return id1.compareTo(id2);
          } else {
              return id1.compareTo(id2) * -1;
          }
      } else if (sortKey_ == SORT_BY_NAME) {
          if (sortType_ == SORT_TYPE_UP) {
              return result1.getName().compareTo(result2.getName());
          } else {
              return result1.getName().compareTo(result2.getName()) * -1;
          }
      } else if (sortKey_ == SORT_BY_ENGLISH_SCORE) {
          Integer englishScore1 = new Integer(result1.getEnglishScore());
          Integer englishScore2 = new Integer(result2.getEnglishScore());

          if (sortType_ == SORT_TYPE_UP) {

              return englishScore1.compareTo(englishScore2);

          } else {
              return englishScore1.compareTo(englishScore2) * -1;
          }
      } else if (sortKey_ == SORT_BY_MATHEMATICS_SCORE) {
          Integer mathScore1 = new Integer(result1.getMathematicsScore());
          Integer mathScore2 = new Integer(result2.getMathematicsScore());

          if (sortType_ == SORT_TYPE_UP) {
              return mathScore1.compareTo(mathScore2);
          } else {
              return mathScore1.compareTo(mathScore2) * -1;
          }
      } else if (sortKey_ == SORT_BY_JAPANESE_SCORE) {
          Integer japaneseScore1 = new Integer(result1.getJapaneseScore());
          Integer japaneseScore2 = new Integer(result2.getJapaneseScore());

          if (sortType_ == SORT_TYPE_UP) {
              return japaneseScore1.compareTo(japaneseScore2);
          } else {
              return japaneseScore1.compareTo(japaneseScore2) * -1;
          }
      } else if (sortKey_ == SORT_BY_EVALUATION) {
          String evaluation1 = result1.getEvaluation();
          String evaluation2 = result2.getEvaluation();
          if (sortType_ == SORT_TYPE_UP) {
              return evaluation1.compareTo(evaluation2);
          } else {
              return evaluation1.compareTo(evaluation2) * -1;
          }
      }
      return 0;
   }
}

   テーブルビューアに対して作成したソータを設定します。

⁄⁄ テーブルソータの設定
testResultViewer.setSorter(new TestResultSorter());

   以上で、ソータの設定は完了です。

前のページ  1  2  3   4  次のページ


ビーブレイクシステムズ社 大森 洋行
著者プロフィール
ビーブレイクシステムズ社  大森 洋行
中堅システム開発会社にて、データベース検索ソフトの開発・導入コンサルティング・セミナー講師に従事。その現場の中で、Java及びオープンソースを用いたシステム開発は今後のシステム開発の主流になると考え、それらを独学で学ぶ。本格的にそれらを用いた開発に携わるため、ビーブレイクシステムズに入社。現在、データ項目やその流れの分析に重点をおきながら、Javaやオープンソースを用いたシステム開発に携わる。


INDEX
第4回:JFaceのGUIコンポーネント
 はじめに
 STEP2:セルの編集
STEP3:選択したセルの編集
 リスナークラスを作成しカラムに追加
Eclipse実践プラグイン開発
第1回Eclipseとプラグイン
第2回プラグインの配布とインストール
第3回基本的なGUIコンポーネントの利用
第4回JFaceのGUIコンポーネント
第5回メニューとポップアップ・メニューの拡張
第6回ビューの拡張
第7回エディタの拡張
第8回パースペクティブの拡張
第9回プロパティと設定の拡張
Eclipseが提供するBIとレポーティングツール
第1回インストールからはじめるEclipse BIRT
第2回データベースのデータをレポートに出力しよう
第3回レポートを作成しよう
第4回スクリプティング機能・Tomcatでのプレビュー・レポートエンジンを使用したレポート出力
Eclipse3ではじめるJava Webアプリケーション開発
第1回Eclipse3の概要とインストール
第2回Eclipse3の基本機能
第3回Eclipse3の基本操作を憶えよう
第4回Eclipseの便利な機能
第5回Webアプリケーションの開発(1)〜JSP作成〜
第6回Webアプリケーションの開発(2)〜サーブレットの作成〜
第7回データベースの利用
第8回フレームワークの利用
第9回O/Rマッパーの利用
第10回JUnitの利用
第11回Antの利用
第12回CVSの利用(1)
第13回CVSの利用(2)
Eclipse WTPによる標準開発ツールの提供
第1回Eclipse WTPの概要とインストール
第2回Eclipse WTPでHello World
第3回Eclipse WTPのDB系ツールを使う
第4回Eclipse WTPのエディタとその他のツール

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored