メソッド |
説明 |
コンストラクタ
|
public MousePositionLS()
∙ activateListenerを呼んでMousePositionLSをListenerPanelに登録。
∙ フィールド変数infosのオブジェクト作成。
|
activateListener
|
private void activateListener(boolean activate)
∙ activate=trueならば、MousePositionLSをListenerPanelに登録。
=> マウス位置をモニターを動作させる。
∙ activate=falseならばこのオブジェクトをListenerPanelから削除。
=>マウスの位置をモニターの動作を停止する。
|
isMouseListener
|
private boolean isMouseListener()
∙ このオブジェクトがListenerPanelに登録されているかを問い合わせる
|
isMouseMotionListener
|
private boolean isMouseMotionListener()
∙ このオブジェクトがListenerPanelに登録されているかを問い合わせる。
|
mousePressed
|
public void mousePressed(MouseEvent e)
∙ popupTriggerのチェックを行う(e.isPopupTrigger())。
∙ マウスの右ボタンが押された場合、その時点で記録されているMousePositionInfoに右ボタンプレスの設定を行う。
=>
MousePositionInfo.rightButtonPressed
∙ 現在のマウス位置情報を画面の下のメッセージパネルに表示する。
|
mouseDragged
|
public void mouseDragged(MouseEvent e)
∙ getMousePositionInfoメソッドを呼び出してマウスにの位置情報(MousePositionInfo)を取得する。
∙ 現在のマウス位置情報を画面の下のメッセージパネルに表示する。
|
mouseReleased
|
public void mouseReleased(MouseEvent e)
∙ popupTriggerのチェックを行う。
(注)popupTriggerはmousePressedとmouseReleasedの両方でチェックする必要がある。
=>
SelectionLS PopupTriggerの取得
∙ 現在のマウス位置情報を画面の下のメッセージパネルに表示する。
|
mouseClicked
|
public void mouseClicked(MouseEvent e)
∙ 現在のマウス位置情報を画面の下のメッセージパネルに表示する。
∙ ポップアップメニューの起動をチェックし、起動する場合にはexecPopupMenu.show(e)でポップアップメニューを表示する。
SelectionLS.mouseClickedにも同じロジックが組み込まれている。
=>
ポップアップメニューの起動
|
mouseMoved
|
public void mouseMoved(MouseEvent e)
∙ this.createMousePositionInfoメソッドを
呼び出してマウスにの位置情報(MousePositionInfo)を取得する。
∙ displayMousePositionメソッドで現在のマウス位置情報を画面の下のメッセージパネルに表示する。
∙ マウスのカーソルの形を変更する。
カーソルオブジェクトはDrawParametersクラスから取り出す。
getMousePositionInfoForSelectionメソッドでマウス位置情報を選び、カーソルの形をセットする。
|
mouseEntered
|
public void mouseEntered(MouseEvent e)
デフォールトカーソルをセットする。
|
mouseExited
|
public void mouseExited(MouseEvent e)
デフォールトカーソルをセットする。
|
displayMousePosition
|
private void displayMousePosition(String mouseAction, double X, double Y)
∙ マウス位置情報を画面下部のメッセージパネルに表示する。
図形にヒットしたマウス位置情報は複数作られている場合、
このクラスのgetMousePositionInfoForSelectionでマウス位置情報を選択する。
|
getMousePositionInfo
ForSelection
|
public MousePositionInfo[] getMousePositionInfoForSelection()
図形選択に使えるマウス位置情報を選択し、複数ある場合には優先順位をつけて返す。
優先順位のランクは次。
∙ MousePositionInfo.NW_RESIZE - W_RESIZE, END_POINT, CONTROL_POINT
∙ MousePositionInfo.SELECTION_BOX.
∙ MousePositionInfo.INSIDE_TEXT. ∙ MousePositionInfo.SHAPE_BOUNDARY
∙ MousePositionInfo.TEXTBOX_BOUNDARY.
∙ MousePositionInfo.SELECTION_BOX
∙ MousePositionInfo.INSIDE_TEXTBOX
∙ MousePositionInfo.INSIDE_SHAPE
∙ MousePositionInfo.BOUNDINGBOX_BOUNDARY, INSIDE_BOUNDINGBOX
:
もしも同じランクのマウス位置情報が複数存在する場合、
例えばMousePositionInfo.INSIDE_SHAPEなど、手前にある図形
(z- order:
操作説明書)を持つマウス位置情報に高いランクを設定する。
|
getMousePositionInfoForMoveResize
|
public MousePositionInfo getMousePositionInfoForMoveResize()
選択図形
にヒットしているマウス位置情報から優先順位の一番高いものを一個だけ返す。
優先順位のランク
∙ MousePositionInfo.NW_RESIZE - W_RESIZE, END_POINT
∙ MousePositionInfo.TEXTBOX_BOUNDARY.
∙ MousePositionInfo.SHAPE_BOUNDARY
∙ MousePositionInfo.SELECTION_BOX
∙ MousePositionInfo.INSIDE_SHAPE
:
もしも同じランクのマウス位置情報が複数存在する場合、例えばMousePositionInfo.INSIDE_SHAPEなど、
手前にある図形(z- order:
操作説明書)を持つマウス位置情報に高いランクを設定する。
|
getAllMousePositionInfo
|
public MousePositionInfo[] getAllMousePositionInfo()
図形にヒットした全てのマウス位置情報を返す。
|
mouseEventCompleted
|
public boolean mouseEventCompleted()
allEventsCompletedの補助メソッド
マウスクリックに対しmousePressed, mouseReleased, mouseClickedの一連の処理を終了したときにtrueを返す。マウスクリックするとmousePressed
->mouseReleased -> mouseClickedの順に呼ばれるので、mousePressedでfalseセット、mouseClickedでtrueをセットする。
このメソッドは他のマウスリスナー(SelectionLS)にもインプリメントされている。
|
allMouseEventCompleted
|
public boolean allEventsCompleted()
PopupMenuの起動に使う。詳細=>ポップアップメニューの起動
現在動作中の全てのマウスリスナーがmouseClickedまで処理を完了したかどうかを問い合わせる。
このメソッドはSelectionLSにもインプリメントされている。
ポップアップメニューはこのクラスかSelectionLSから起動される。
|
createMousePositionInfo
|
private void createMousePositionInfo(double X, double Y)
∙ マウス位置情報計算のメインメソッド。
∙ 対象図形がグループ図形
ならば下のcreateMousePositionOfGroupを呼んで計算。
∙ グループ図形
でなければ下のcreateMousePositionOfShapeをコール。
|
createMousePosition
OfShape |
private void createMousePositionOfShape(double X, double Y, ShapeContainer shapeContainer)
グループでない図形に対しマウスが図形のどの位置にあるかを判定する。
|
createMousePosition
OfGroup |
private void createMousePositionOfGroup(double X, double Y, ShapeContainer
shapeContainer)
グループ図形に対するマウスの位置情報を計算する。
このメソッドではMousePositionInfo.BOUNDINGBOX_BOUNDARY,
MousePositionInfo.SELECTION_BOX とリサイズマーク上にあるか否かだけテストする。
さらに詳細なテストは次のcreateMousePositionOfShapeInGroupで行う。
|
createMousePosition
OfShapeInGroup |
private void createMousePositionOfShapeInGroup(double X, double Y, ShapeContainer
groupContainer, ShapeContainer shapeContainer)
Parameters:
(X, Y) - マウス位置。
groupContainer - グループ図形のShapeContainer.
shapeContainer - groupContainerに含まれるShapeContainer。
Processing:
このメソッドではMousePositionInfo.TEXTBOX_BOUNDARY と MousePositionInfo.INSIDE_TEXT
をテストする。
|
ptOnShape
|
private int ptOnShape(double X, double Y, ShapeContainer shapeContainer)
shapeContainerにグループ図形を指定するのは不可。
(X,Y)がshapeContainerの境界上/内部にあるか否かをチェックする。
∙ 閉図形ではない場合
Curve2DUtil.getShortestLineで(X,Y)から輪郭線の最短点を求める。
(X,Y)と最短点の距離がトレランス(注)以下の場合、境界上(SHAPE_BOUNDARY)にあると判定。
∙ 閉図形の場合
(X,Y)の南北東西にトレランスの距離だけ離れた4点を作り、この4点が閉図形内部にあるか否かで決定する。
4点とも内部にある場合INSIDE_SHAPE、少なくとも1点が内部にある場合SHAPE_BOUNDARYを返す。
戻り値: 0/ SHAPE_BOUNDARY/INSIDE_SHAPE
(注)トレランスはリサイズマークサイズの1/2*(1/scale)。scaleは表示倍率。
=>
図形のヒットテスト |
ptOnBox
|
private int ptOnBox(double X, double Y, Rectangle2D box)
引数:
(X, Y) - 現在のマウス位置
box - Rectangle2Dオブジェクト
戻り値: 0/ BOUNDINGBOX_BOUNDARY/INSIDE_BOUNDINGBOX
処理:
(X,Y)が矩形境界上/内部にあるか否かをチェックする。
矩形境界上のあるか否かの判定方法はptOnShapeメソッドの閉図形の場合と同じ。
|
ptInfOnBox |
private String ptInfOnBox(double X, double Y, Rectangle2D box)
このメソッドは createMousePositionOfShape,
createMousePositionOfShapeInGroupから呼ばれる。
現在のところ. TEXTBOX_BOUNDARYの場合の補助情報をセットするために使われ、
TextBox.mouseDragged メソッドで参照される。
引数:
(X, Y) - 現在のマウス位置
box - Rectangle2Dオブジェクト
戻り値:
"outside"/"inside"/"top"/"bottom"/"left"/"right"のいずれかを返す。
処理:
ptOnBox メソッドと同様。
|
onPoint
|
private int onPoint(double X, double Y, Point2D[] points)
(X,Y)点があるトレランスで点に一致するか否かをチェックする。
戻り値: (X,Y)がどれかの点と一致する場合そのindex番号を返す、一致しない場合-1を返す。
|
onResizeMark
|
private int onResizeMark(double X, double Y, Rectangle2D rectangle)
あるトレランスでリサイズハンドル上にあるか否かを判定する。
戻り値: マーク上にない場合0、マーク上にある場合、次の値のどれかが返される。
NW_RESIZE, NE_RESIZE, SE_RESIZE, SW_RESIZE, N_RESIZE, E_RESIZE, S_RESIZE,
W_RESIZE
|
boxContains
|
private boolean boxContains(double X, double Y, double delta, double boxX,
double boxY)
(boxX, boxY)を中心とし辺の長さが2*deltaのBox内に(X,Y)があるか否かをチェックする。
戻り値: ない場合false、ある場合はtrueを返す。
|
setMousePosition |
<private void setMousePosition(ContainerIF container, ShapeContainer shapeContainerInGroup,
TextBox textBox, int position, Point2D point, String inf)
あらかじめ確保してあるMousePositionInfoの配列にマウス位置情報をセットする。
=>
特記事項
|