Java Drawing DrawTop

Language

JP  US  UK

 

画面の拡大/縮小

 H. Jyounishi, Tokyo Japan
 

Frame (Index), No frame                 version:0.3(latest)  

要旨:画面の拡大/縮小を指示するダイアログを表示する(DialogOfZoom)。ダイアログにはコンボボックスとスピナーを表示し、倍率を指定できるようにする。ダイアログのOKボタンを押すと、アクション処理をDialogOfZoomActionで行いZOOM_TOコマンドを作成してコマンドディスパッチャーExecCommandを呼ぶ。

このページで説明するクラス: DialogOfZoom, DialogOfZoomAction, ZoomItemListener, ZoomSpinnerChangeListener


1. DialogOfZoomクラス 戻る=>page top
1.1 ダイアログ
ダイアログで拡大/縮小率を指定する。
∙ 左側はコンボボックス、右側は1%刻みのスピナー。
∙ コンボボックスで選んだ値は、右側ぼスピナーに反映する。
∙ スピナーで指定した値が、コンボボックスのどの値にも一致しないとき
 =>コンボボックス側はスペースを表示する。
∙ コンボボックス、スピナーで倍率を指定すると画面をその倍率で再描画する。
∙ 最後に"Cancel"ボタンを押すと、ダイアログで設定前の倍率に戻す。

図 1 ダイアログ

1.2 DialogOfZoom API
public class DialogOfZoom extends JDialog
フィールド 説明
main public static DialogOfZoom main
DialogOfZoomオブジェクトを設定する。他のクラスで参照するときに使う。
dialogDimension Dimension dialogDimension
ダイアログのサイズ。setPreferredSizeで設定する。
zoomComboBox JComboBox zoomComboBox
ダイアログ左側のComboBoxオブジェクトを設定する。
zoomSpinner JSpinner zoomSpinner
ダイアログ左側のスピナーオブジェクトを設定する。
zoomSpinnerModel SpinnerNumberModel zoomSpinnerModel
スピナーモデル
scaleSave double scaleSave
このオブジェクトが作成された時の表示倍率をセーブする。

メソッド 説明
コンストラクタ public DialogOfZoom()
super(ObjectTable.getDrawMain(), "zoom");
this.main=this
showDialog public void showDialog()
∙ ダイアログの表示位置:キャンバスの左上に表示する。
∙ ダイアログにzoomPanelを設定

zoomPanelは次のcreateZoomPanelメソッドで作成する。

∙ pack、setVisibleでダイアログを表示。
createZoomPanel private JPanel createZoomPanel() ∙ zoomPanelにコンボボックス、スピナーを配置する。

上段左側にcomboBoxPanelを作成しコンボボックスを配置、右側にspinnerPanelを作成しスピナーを配置する。
コンボボックス、スピナーにはアクションリスナー(DialogOfZoomAction)、 アイテムリスナー(ZoomItemListener)を設定する。

∙ 下段のbuttonPanelにOK、Cancelボタンを設定し、それらにアクションリスナー(DialogOfZoomAction)を設定する


2. DialogOfZoomActionクラス  戻る=>page top
class DialogOfZoomAction extends AbstractAction
コンボボックス、OKボタン、Cancelボタンに設定する。
フィールド 説明
main static DialogOfZoomAction main
DialogOfZoomActionオブジェクトを設定する。他のクラスで参照するときに使う。

メソッド 説明
actionPerformed public void actionPerformed(ActionEvent e)
OK、Cancelボタンが押されたときに、アクション処理を実行する。
∙ OKボタン

zoomComboBoxの選択されているアイテムがスペースでなければ、zoomComboBoxから選択アイテムの文字列を取り出し、このクラスのgetScaleメソッドで倍率を得る。getScaleでは数字だけでなく"fit width"、"fit height"からも倍率を求める。
zoomComboBoxの選択アイテムがスペースならば zoomSpinnerModelの倍率を使う。
"ZOOM_TO"コマンドを作成してExecCommand.execメソッドを呼んでコマンドディスパッチ。
DialogOfZoom.main.setVisible(false)でダイアログを閉じる。

∙ Cancelボタン

DialogOfZoom.main.setVisible(false)でダイアログを閉じる。

getScale protected double getScale(String scaleString)
DrawParameters.getSheetSizeByPixelメソッドで DrawPanelのサイズ(drawPanelW, drawPanelH)を取得。
ScrollPaneのサイズからInsetsとマージンを引いてScrollPaneの内側のサイズ(scrollPaneW, scrollPaneH)を求める。
・引数が"fit width"のとき
 scale=scrollPaneW/drawPanelW;
・引数が"fit height"のとき
 scale=scrollPaneW/drawPanelW;
・引数が上記以外のとき
 引数をdouble型に変換してscaleに設定。
scaleを戻り値で返す。


3. ZoomItemListenerクラス 戻る=>page top
class ZoomItemListener implements ItemListener
このリスナーはコンボボックス(zoomComboBox)に設定する。
メソッド 説明
itemStateChanged public void itemStateChanged(ItemEvent e)
コンボボックスのアイテムが選択されたときにスピナー(zoomSpinner)に倍率を反映させる。
(注 )setValueメソッドでスピナーに値を設定すると、 ZoomSpinnerChangeListenerが動作するので、 一旦ZoomSpinnerChangeListenerを削除し、setValueメソッドで値を設定後に、 再度ZoomSpinnerChangeListenerを設定しなおす。


4. ZoomSpinnerChangeListener 戻る=>page top
class ZoomSpinnerChangeListener implements ChangeListener
このリスナーはスピナー(zoomSpinner)に設定する。
メソッド 説明
stateChanged public void stateChanged(ChangeEvent e)
スピナー(zoomSpinner)に倍率が設定されたとき、その倍率がコンボボックスの どれかのアイテムに一致すればそのアイテムを設定する。 一致しなければスペースのアイテムを設定する。
: setSelectedIndexメソッドでコンボボックスのアイテムを設定すると、 ZoomItemListenerが動作するので、 一旦ZoomItemListenerを削除し、setSelectedIndexメソッドでコンボボックスにアイテムを設定した後に、 再度ZoomItemListenerを設定しなおす。


Copyright (c) 2009-2013
All other trademarks are property of their respective owners.