段階 3 の概要
チュートリアルの第 3 段階である Sample3.java ファイル (
<installdir>
/jviews-framework89/codefragments/getstart/index.html を参照) は、Sample2 ファイルを拡張したものです。Sample3.java ファイルをコンパイルし、前の例の場合と同じように実行します。「例の実行」を参照してください。
![sample3.png](../../JViews_Framework/usressfwork/_media/sample3_default.png)
サンプル 3 の実行
イベントを利用するには、 InteractorListener インターフェースを使用してインタラクター変更の通知を受けます。例には 3 つのボタンがあり、それぞれがインタラクターに関連付けられています。ボタンを順番にクリックすると、それに応じて「使用中」のインタラクターが変わります。
次の 2 つの新規インタラクターがビューに配置されます。 IlvZoomViewInteractor および IlvUnZoomViewInteractor. これらのインタラクターを使用すると、ビュー内の矩形をドラッグし、この領域で拡大/縮小できます。3 番目のインタラクターは (
Sample2
の) IlvSelectInteractor。
それぞれのボタンは、上の図に表示されるようにボタンを自動的に整列する Swing JPanel の中に作成されます。新規インタラクター・フィールドの追加
タスクを実行するには、
InteractorListener
を実装するクラス定義を変更し、zoomInteractor
および unzoomInteractor
フィールドを追加して、必要なインタラクター・ボタン・フィールドを Sample3
アプリケーションに追加します。public class Sample3 extends JFrame implements InteractorListener { IlvManager manager; IlvManagerView mgrview; IlvSelectInteractor selectInteractor; IlvManagerViewInteractor zoomInteractor, unZoomInteractor; Button selectButton, zoomButton, unZoomButton; .... }
インタラクター・ボタンの作成
createInteractorButtons
メソッドは、オブジェクトの selectButton
、zoomButton
、および unZoomButton
フィールドに保存する 3 つのボタン (選択、-、および +) を作成します。インタラクター・ボタンの作成
void createInteractorButtons() { Panel buttons = new Panel(); selectButton = new Button("Select"); selectButton.setBackground(Color.gray); selectButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { if (selectInteractor == null) selectInteractor = new IlvSelectInteractor(); if (mgrview.getInteractor() != selectInteractor) mgrview.setInteractor(selectInteractor); } } }); buttons.add(selectButton); unZoomButton = new Button("-"); unZoomButton.setBackground(Color.gray); unZoomButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { if (unZoomInteractor == null) unZoomInteractor = new IlvUnZoomViewInteractor(); if (mgrview.getInteractor() != unZoomInteractor) mgrview.setInteractor(unZoomInteractor); } }); buttons.add(unZoomButton); zoomButton = new Button("+"); zoomButton.setBackground(Color.gray); zoomButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { if (zoomInteractor == null) zoomInteractor = new IlvZoomViewInteractor(); if (mgrview.getInteractor() != zoomInteractor) mgrview.setInteractor(zoomInteractor); } }); buttons.add(zoomButton); getContentPane().add(buttons, BorderLayout.SOUTH); }
これで使用可能なインタラクターが 3 つになりました。そのため、ボタンをクリックしてアクションを実行すると、前にインストールしたインタラクターが削除され、
IlvManagerView
クラスの setInteractor メソッドを呼び出すと、新規のインタラクターがインストールされます。インタラクターの変更を通知する
Sample3.java
ファイルでは、クラスが InteractorListener
インターフェースを実装することがわかります。また、Rogue Wave JView のイベント・クラスが含まれるパッケージである、新規パッケージ package-summary をインポートしたこともお気付きでしょう。InteractorListener
インターフェースには、次のメソッドがあります。この例では、対応するインタラクターがビューに付加されると選択ボタンが赤になるようにします。
interactorChanged
メソッドは、ビュー上のインタラクターが変わると呼び出されます (オブジェクト (Sample3
のインスタンス) がリスナーとして登録された直後。「リスナーの登録」を参照してください)。パラメーターは新旧のインタラクターがあるイベントです。新規にインストールされたインタラクターに対応するボタンの背景色を赤に変更します。インタラクター・ボタンの色を変更する
public void interactorChanged(InteractorChangedEvent event) { IlvManagerViewInteractor oldI = event.getOldValue(); IlvManagerViewInteractor newI = event.getNewValue(); if (oldI == selectInteractor) selectButton.setBackground(Color.gray); else if (oldI == zoomInteractor) zoomButton.setBackground(Color.gray); else if (oldI == unZoomInteractor) unZoomButton.setBackground(Color.gray); // there is no new interactor if (newI == null) return; if (newI == selectInteractor) selectButton.setBackground(Color.red); else if (newI == zoomInteractor) zoomButton.setBackground(Color.red); else if (newI == unZoomInteractor) unZoomButton.setBackground(Color.red); }
リスナーの登録
インターフェースの実装だけでは十分ではありません。この新規のリスナーをビューに登録する必要があります。これは、
init
メソッドでの addInteractorListener
メソッドを呼び出して行います。
...
manager = new IlvManager();
try {
manager.read("data/lou.ivl");
} catch (Exception e) {}
mgrview = new IlvManagerView(manager);
setLayout(new BorderLayout(0,0));
getContentPane().add(new IlvJScrollManagerView(mgrview),
BorderLayout.CENTER);
createButtons();
mgrview.addInteractorListener(this);
...