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を設定しなおす。
|
|