右クリックとダブルクリック ファイルはzipフォルダに納められています。
解凍ソフト(Aladdin
Expander等)を使って解凍して下さい。
折れ線描画のアルゴリズム 初めの1回のクリックでは、「始点」の座標しかないので直線を引けません。
2回目のクリックで1本直線を引いた後は、其の時の「終点」が次の直線の「始点」となり、次々にクリックしていく事で折れ線になります。
従って、2回目以降は全て同じ処理になります。
処理のアルゴリズム |
先ず、1回目か2回目以降なのかを区別する為の「flag」をグローバル変数として宣言
「flag」が「false」の時は1回目、「true」の時は2回目以降の処理に |
1回目の処理は始点の座標を保存し、「flag」を「true」に変えておく |
2回目以降の処理は、保存されている座標を始点、現在の座標を終点として直線を引き、次にクリックされた時の為に、現在の座標を次の直線の始点として保存 |
ダブルクリックを検出した時は、「flag」を「false」に戻しておく事で、次のクリックが1回目の始点となって、折れ線を終了可能 |
ダブルクリックの判定 MouseEventクラスのgetClickCountメソッドを使います。
此のメソッドは、int型で何回クリックされたかを返します。 if(e.getClickCount() == 2){ /*ダブルクリックだったら*/ |
マウスのイベントが発生した時の状態 マウスのイベントが発生した時、マウスのどのボタンが押されたのか、又、同時にシフトキーやCtrlキーが押されていたか等の状態を読み出すには、getModifiers()メソッドを使います。
此のメソッドは、ビット毎に意味が割り振られたint型の数値が求められます。
そして、各ビットの値にはInputEventクラスに定数名が定められています。
以下に良く使われる定数名とビット位置との関係を示します。
例えば右クリックされた時にシフトキーが押されていたら、「getModifiers()」で得られる値は、「SHIFT_MASK+BUTTON3_MASK」となります。
其の為、(他のキーではどうでも良く)右クリックされているかどうかを知りたい場合には、「getModifiers()」で得られる値の中から、「BUTTON3_MASK」のビットだけがどうなっているかを知る必要が有ります。
其れには、ビット毎のAND演算「&」を行って、他のビットを全部「0」にした結果の値が「BUTTON3_MASK」に等しいかどうかで判定します。 if(e.getModifiers() & InputEvent.BUTTON3_MASK) == InputEvent.BUTTON3_MASK){
/*ダブルクリックだったら終わり*/
flag = false;
} |
右クリックの検出〜もう1つの方法〜 SwingUtilitiesクラスには、マウスのクリックがどのボタンによる物だったかを判定する以下の様なメソッドが用意されています。 static boolean isLeftMouseButton(MouseEvent)
static boolean isMiddleMouseButton(MouseEvent)
static boolean isRightMouseButton(MouseEvent) |
何れも「static」の付いたクラスメソッドなので、SwingUtilitiesクラスのインスタンス化されたオブジェクトを用意する必要はなく、引数にMouseEventクラスのオブジェクトを指定して、メソッドを呼び出せます。
尚、SwingUtilitiesクラスは「javax.swing」パッケージに有るので、プログラムの先頭で此のパッケージをimportする必要が有ります。 戻る |