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

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

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

   次に、表示している各データをテーブル上で編集できるように変更します。

   出席番号、各教科の点数、氏名は文字列、評価はコンボボックスで"A 〜 E"の5段階評価から選択するようにします。

   テーブル上でデータの編集を可能にするには、テーブルに対してセルエディタを設定する必要があります。セルエディタは、編集するデータの型によって使用するクラスが異なります。
セルエディタ データの型 備考
CheckboxCellEditor Boolean CheckboxCellEditorでは真/偽を保持するのみでチェックボックスのイメージは提供しません。チェックボックスのイメージを表示したい場合はあらかじめ画像ファイルを用意し、ラベルプロバイダでイメージを返すように実装します
ComboBoxCellEditor Integer コンボボックスによるデータの編集を行うエディタ。インデックスをあらわすIntegerを扱います
ColorCellEditor RGB RGBのカラーデータを扱うエディタ。DialogCellEditorのサブクラス
TextCellEditor String 文字列を扱うエディタ
DialogCellEditor Object 任意のデータを扱うエディタ。独自のエディタを利用する場合はこのクラスを継承

表1:セルエディタ一覧

   まずは、テーブルビューアの各カラムに対応するセルエディタを設定します。プロパティは後ほど登場するセルモディファイヤの部分において出てきますので、ここではこういうものだと思って先に進んでください。

⁄⁄ カラムを識別するためのプロパティ
String[] properties = new String[] {
   "id", "name", "english_score", "japanese_score", "mathematics_score"
};

⁄⁄ プロパティの設定
testResultViewer.setColumnProperties(properties);

⁄⁄ ComboBoxCelEditorに表示するアイテム
String[] evaluationItems = new String[] {
   "A", "B", "C", "D", "E"
};

⁄⁄ セルエディタの生成
CellEditor[] cellEditors = new CellEditor[]{
   new TextCellEditor(testResultTable),
   new TextCellEditor(testResultTable),
   new TextCellEditor(testResultTable),
   new TextCellEditor(testResultTable),
   new TextCellEditor(testResultTable),
   new ComboBoxCellEditor(testResultTable, evaluationItems)
};

⁄⁄ セルエディタの設定
testResultViewer.setCellEditors(cellEditors);

   ここまででテーブルビューアに対するセルエディタの設定は完了ですが、データとセルエディタが関連付いていないので、現時点ではセルの編集はできません。編集可能にするには、データとセルエディタを関連付けるためにセルモディファイヤと呼ばれるクラスが必要になります。



package table_viewer;

import org.eclipse.jface.viewers.ICellModifier;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.widgets.TableItem;

⁄**
 * データとセルエディタを関連付けるためのクラス
 *⁄
public class TestResultCellModifier implements ICellModifier {

   private TableViewer viewer_;

   private String[] evaluationItems_;

   public TestResultCellModifier(TableViewer viewer, String[] evaluationItems) {
     viewer_ = viewer;
     evaluationItems_ = evaluationItems;
   }

   ⁄**
    * 編集可能かどうかを返すメソッド
    * @return true=編集可能、false=編集不可
    *⁄
    public boolean canModify(Object element, String property) {
      return true;
    }

   ⁄**
    * エディタに表示するデータを返す
    * @param element 選択された行に対応するデータ
    * @param property 選択されたカラムのプロパティ
    * @return 表示する値
    *⁄
    public Object getValue(Object element, String property) {
      TestResult testResult = (TestResult)element;
      Object result = null;

      ⁄⁄ プロパティに応じて返す値を設定する
      ⁄⁄ プロパティはtestResultViewer.setColumnProperties(properties);で設定したものに対応する
      if (property.equals("id")) {
          result = String.valueOf(testResult.getId());
      } else if (property.equals("name")) {
          result = testResult.getName();
      } else if (property.equals("english_score")) {
          result = String.valueOf(testResult.getEnglishScore());
      } else if (property.equals("japanese_score")) {
          result = String.valueOf(testResult.getJapaneseScore());

      } else if (property.equals("mathematics_score")) {
          result = String.valueOf(testResult.getMathematicsScore());       } else if (property.equals("evaluation")) {
          ⁄⁄ コンボボックスの場合はインデックスを返す
          for (int cnt = 0; cnt < evaluationItems_.length; cnt++){
              String evaluationItem = evaluationItems_[cnt];
              if (evaluationItem.equals(testResult.getEvaluation())) {
                  result = new Integer(cnt);
                  break;
              }
          }
      }
      return result;
    }

    ⁄**
     * エディタの変更の通知を受ける
     *
     * @param element
     * @param property
     * @param value
     *⁄
    public void modify(Object element, String property, Object value) {
      TableItem tableItem = (TableItem)element;
      TestResult testResult = (TestResult)tableItem.getData();

      ⁄⁄ プロパティに応じて返す値を設定する
      ⁄⁄ プロパティはtestResultViewer.setColumnProperties(properties);で設定したものに対応する
      if (property.equals("id")) {
          try {
              testResult.setId(Integer.valueOf( (String)value).intValue());
          } catch(NumberFormatException numEx) {
              ⁄⁄ 数値でない場合
          }
      } else if (property.equals("name")) {
          testResult.setName( (String)value);
      } else if (property.equals("english_score")) {
          try {
              testResult.setEnglishScore(Integer.valueOf( (String)value).intValue());
          } catch(NumberFormatException numEx) {
              ⁄⁄ 数値でない場合
          }
      } else if (property.equals("japanese_score")) {
          try {
              testResult.setJapaneseScore(Integer.valueOf( (String)value).intValue());
          } catch(NumberFormatException numEx) {
              ⁄⁄ 数値でない場合
          }
      } else if (property.equals("mathematics_score")) {
          try {
              testResult.setMathematicsScore(Integer.valueOf( (String)value).intValue());
          } catch(NumberFormatException numEx) {
              ⁄⁄ 数値でない場合

          }
      } else if (property.equals("evaluation")) {
          ⁄⁄ コンボボックスの場合はインデックスを返す
          String evaluation = evaluationItems_[((Integer)value).intValue()];
          testResult.setEvaluation(evaluation);
      }
      ⁄⁄ テーブルビューアを更新
      viewer.update(testResult, null);
    }
}

   次に、作成したセルモディファイヤをテーブルビューアに設定します。

⁄⁄ セルモディファイヤの設定
testResultViewer.setCellModifier(new TestResultCellModifier(testResultViewer, evaluationItems));

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

STEP2の実行結果
図2:STEP2の実行結果

STEP2のソースコード
Text  step2.zip
  (ZIPファイル/4.49KB)
前のページ  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

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