Webアプリ開発エンジニアのための技術情報サイト「テックスコア」

5. VisualizationViewer関係のTips

2006.02.20 株式会社四次元データ 鈴木 圭

前回までは PluggableRenderer に関する説明をしてきましたが、今回は VisualizationViewer に関する説明をしていきます。

5.1. マウスによる操作 - VisualizationViewer.GraphMouse

VisualizationViewer には void setGraphMouse(VisualizationViewer.GraphMouse) というメソッドがあり、マウスイベントに対する処理を追加することが出来ます。これにより、例えば、マウス操作により視点の移動や拡大縮小などの処理を追加することが出来ます。setGraphMouse(VisualizationViewer.GraphMouse) メソッドの引数である VisualizationViewer.GraphMouse インタフェースは、マウス関係のリスナー(java.awt.event.MouseListener, java.awt.event.MouseMotionListener, java.awt.event.MouseWheelListener)をまとめた(継承した)ものです。つまり、VisualizationViewer.GraphMouse は VisualizationViewer 上で発生したマウスイベントに対するリスナーということです。

次に示すのは、edu.uci.ics.jung.visualization.ZoomPanGraphMouse というクラスを VisualizationViewer に設定するコードです。ZoomPanGraphMouse クラスはマウスの左ドラッグによる視点の移動とホイールの回転による拡大縮小を行います。

VisualizationViewer viewer = ...

viewer.setGraphMouse(new ZoomPanGraphMouse());

5.2. PluggableGraphMouse と GraphMousePlugin

5.1 では VisualizationViewer に ZoomPanGraphMouse を設定して、マウスイベントに対する処理(視点の移動と拡大縮小)を行いました。しかし、VisualizationViewer には VisualizationViewer.GraphMouse を1つしか設定できないため、ZoomPanGraphMouse とその他の VisualizationViewer.GraphMouse の実装クラスを同時に利用することができません。JUNG にはそのような場合のために edu.uci.ics.jung.visualization.control.PluggableGraphMouse というクラスがあります。

PluggableGraphMouse は、それ自身は具体的な処理を行わず、edu.uci.ics.jung.visualization.control.GraphMousePlugin に処理を委譲します。GraphMousePlugin とは、VisualizationViewer.GraphMouse と同様、マウスイベントに対する処理を表すインタフェースです。そして PluggableGraphMouse には複数の GraphMousePlugin を追加することができるので、マウスイベントに対する処理を組み合わせることができるようになります。

ここでとりあえずサンプルプログラムを見てみましょう。

VisualizationViewer viewer = ...

PluggableGraphMouse graphMouse = new PluggableGraphMouse();
graphMouse.add(new TranslatingGraphMousePlugin());
graphMouse.add(new ViewScalingGraphMousePlugin());
graphMouse.add(new ShearingGraphMousePlugin());
viewer.setGraphMouse(graphMouse);

PluggableGraphMouse を作成し、それに GraphMousePlugin の実装クラスである TranslatingGraphMousePlugin(平行移動)、ViewScalingGraphMousePlugin(拡大縮小)、ShearingGraphMousePlugin(せん断:正方形を平行四辺形に変換する処理)を追加しています。このように、マウスイベントに対する処理を自由に組み合わせて使うことができます。以下に実行例を示します。

元の状態
元の状態

平行移動:マウス左ドラッグ
平行移動

拡大縮小:[Ctrl] + マウスホイールの回転
拡大縮小

せん断:[Ctrl] + マウス左ドラッグ
せん断

各処理の名前に、それに使用したマウス操作を付記しましたが、これは各 GraphMousePlugin の実装クラスごとにデフォルトで「どのマウスイベントが発生したときに処理を行うのか」が決まっているからです。もしデフォルトとは異なるイベントが発生したときに処理を行わせたい場合は、各 GraphMousePlugin の実装クラスのコンストラクタで指定するか、GraphMousePlugin に含まれる void setModifiers(int) メソッドを利用します。

GraphMousePlugin の実装クラスには次のようなものがあります。(全て edu.uci.ics.jung.visualization.control パッケージ)

クラス名 処理内容 デフォルトのイベント
AnimatedPickingGraphMousePlugin クリックした頂点が中央になるように移動 [Ctrl]キー + (頂点を)左クリック
PickingGraphMousePlugin 頂点やエッジの選択
ドラッグによる頂点の移動
左クリック / 左ドラッグ
RotatingGraphMousePlugin 回転 [Shift]キー + 左ドラッグ
ScalingGraphMousePlugin 拡大縮小(※注) マウスホイールの回転
ViewScalingGraphMousePlugin 拡大縮小(※注) [Ctrl]キー + マウスホイールの回転
ShearingGraphMousePlugin せん断 [Ctrl]キー + 左ドラッグ
TranslatingGraphMousePlugin 平行移動 左ドラッグ

(※注) ScalingGraphMouse と ViewScalingGraphMouse はともに拡大縮小(スケーリング)を行うものですが、ScalingGraphMouse を使った場合は頂点やエッジの大きさはそのままで、頂点間の距離だけが拡大縮小されます。一方の ViewScalingGraphMouse は頂点やエッジの大きさなど、表示されているもの全体が拡大縮小されます。



前のページへ TECHSCOREのTOPページへ 次のページへ
TECHSCORE PR
PR
PR
PR
PR
PR

techscore(トップページへ)
TECHSCORE書店
TECHSCOREトップページJavaSQLXMLリッチクライアントモデリングセマンティックWebその他技術Tuigwaa