説明しづらいのですが、
============================
Javaによって生成された画面上の任意の点を右クリックして出るポップアップメニューの「生成」なる項目を選択するとダイアログボックスが現れ、例えば名前やIDなどを入力して決定を押すと、その右クリックした地点に●が表示されついでに内部的においても 点を意味する Point なるオブジェクトが生成される。
また任意の場所で右クリックして出るポップアップメニューの「連結」なる項目をクリックし、2つの●をチョンチョンとクリックするとそれらを結ぶ線が表示され、ついでに内部でも 2つのPointオブジェクト同士をリンクさせる.
最後に「保存」なるボタンを押すと、出来上がったグラフの情報(どの位置に点があって、どの点とどの点が結ばれているか等)をファイルに保存する.
=========================
つまり単純に無向グラフをGUI操作で生成して、なんらかのファイル形式に保存したいと思っています.
ただ、GUI部分をどう始めればよいか見当がつきません.
awt の canvas を使って全て作るとなると、「クリックした場所の当たり判定」みたいなことをしなければいけないのかな?なんて思って気が引けてしまいます。
このようなことをしたい場合はどういった方法が考えられるでしょうか.
アドバイスをお願いします。
No.2ベストアンサー
- 回答日時:
/*キャンパス上でのマウス左クリック時の処理。
前もって、ポップアップメニュー処理時に、
「生成」項目が選択されたら変数stateにS_POINT_CREATEを、
「連結」項目が選択されたら変数stateにS_LINE_CREATE_1を
代入しておく*/
public void mouseClicked(MouseEvent e){
int x=e.getX(),y=e.getY();
switch(state){
case S_NORMAL://通常モード
break;
case S_POINT_CREATE://点生成モード
list.add(new MyPoint(x,y));//点をリストに登録
state=S_NORMAL;//通常モードに戻す
canvas.repaint();
break;
case S_LINE_CREATE_1://連結モード1(始点決定処理)
MyPoint p=hit(x,y);//クリック位置と図形リストとの当たり判定
if(null!=p){//「当たった」図形(点)があったら…
old_point=p;//その図形(点)を記憶しておく
state=S_LINE_CREATE_2;//いざ連結モード2へ!
}else{//どの図形(点)にも当たらなかったら…
state=S_NORMAL;//通常モードに戻す
}
break;
case S_LINE_CREATE_2://連結モード2(終点決定処理)
MyPoint p=hit(x,y);//クリック位置と図形リストとの当たり判定
if(null!=p &&//「当たった」図形(点)があり、かつ
p!=old_point){//それが「始点」でないなら…
list.add(new MyLine(old_point,p));//線をリストに登録
canvas.repaint();
}
old_point=null;//記憶を消去しておく
state=S_NORMAL;//通常モードに戻す
break;
}
}
---
「全図形との当たり判定」は、
図形群が登録された「図形リスト」の全要素それぞれに対して
"個別に"「当たり判定」を行うだけ。
↓解説。
ソースコード付きなので、
これだけでとりあえずなんとかなるでしょう。
(C++だけど、Javaに似てるので「流れ」は読めます。コメントつき。
Boland C++Bulderのライブラリを使ってるのかな?)
http://www.itmedia.co.jp/enterprise/0309/22/epn1 …
(ソースコードはUPageForm.cppあたりに上記の分岐処理が書かれている)
お礼が遅れてしまって大変申し訳ありません..
パスワードを忘れてログインできずに居ましたm(_ _;)m
参考URLが大変参考になりました!
ドローイングツールの基本的な仕組みはこうなっていたんですね.
#1さんの方法と合わせて、無事作成することができました。
本当にありがとうございます。
No.1
- 回答日時:
クリックに反応できるカスタムコンポーネントを作るといいのかも
連結の処理なんかは、
例えば、クラス変数で、連結モードになっていたら…というような処理でいいかと思います。
お礼が遅れてしまって大変申し訳ありません!
誤ってパスワードマネージャの記録を消してしまい、ログインできませんでしたm(_ _;)m
>クラス変数で、連結モードになっていたら…というような処理でいいかと思います。
描画やクリックイベントなどの基本的な仕組みは#2さんの方法を用いて、2点間の連結操作には#1さんの方法をそのまま使わせていただきました。
大変参考になりました。
ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Windows 8 動画の再生とタイトルの変更方法を教えてください。 3 2022/08/01 14:51
- Excel(エクセル) 余計なお世話的な「入力規則」?対策は? 2 2023/01/14 12:39
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- MySQL MySQL,JavaScript,PHPコードの結果を表示する方法を教えてください。 1 2023/02/13 17:49
- その他(Microsoft Office) Microsoft Edgeの「ニュースと関心事項」についてお聞きします。 3 2023/05/22 12:08
- 画像編集・動画編集・音楽編集 Google Earth Pro 高速道路上空を一定の速度で飛ぶツアー動画の作り方は?? 1 2022/06/01 15:10
- Windows 10 「新規作成」メニューが表示されません 2 2023/04/07 14:56
- その他(クラウドサービス・オンラインストレージ) データ保存先をOneDriveからPC本体に変えたらDocumentとPictureフォルダが消えた 1 2023/07/30 15:48
- 音楽・動画 ノートパソコンで動画再生の設定の変更について*長文ですが何卒宜しくお願い致します。 3 2022/10/18 12:24
- その他(プログラミング・Web制作) pythonで、tkinterとpillowの組み合わせ 2 2022/08/16 17:42
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ORA-01858: 数値を指定する箇所...
-
C# ListBoxのインデックスの値...
-
配列にnullを代入すると、null...
-
getStringの値がNULLの時の処理
-
Java配列でNullPointerExceptio...
-
Tomcatを再起動するとエラーが...
-
入力された文字列の制限
-
C#でラジオボタンとコンボボッ...
-
逆コンパイルの見方について(...
-
JSPで複数のSQL実行につ...
-
逆コンパイルの見方について(...
-
gas カレンダー祭日設定でエラー
-
BOOL値を逆にしたい
-
例外でBeanUtils.populateが、...
-
eclipseでoracle接続時のエラー...
-
Log4jで機能毎に別ファイルへ出...
-
flush()とclose()について
-
C言語のポインターに関する警告
-
IF関数でEmpty値を設定する方法。
-
javaで質問です。 文字列2023/2...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ORA-01858: 数値を指定する箇所...
-
配列にnullを代入すると、null...
-
Java配列でNullPointerExceptio...
-
BOOL値を逆にしたい
-
getStringの値がNULLの時の処理
-
C# ListBoxのインデックスの値...
-
eclipseでoracle接続時のエラー...
-
gas カレンダー祭日設定でエラー
-
Javascript エラーメッセージが...
-
java 引数 戻り値のあるメソッド
-
C#でラジオボタンとコンボボッ...
-
MySQLのテーブル名を変数に置い...
-
jsp/Servletの動的に増えるフォ...
-
例外でBeanUtils.populateが、...
-
Stringを返す getText()メソッ...
-
JSPで複数のSQL実行につ...
-
逆コンパイルの見方について(...
-
if文を通らない
-
この世で連日正規表現について...
-
逆コンパイルの見方について(...
おすすめ情報