これを行うにはいくつかの問題があります。基本的には、以前はGraphics2DとGeneralPathを使用してJPanel上に線分をいくつか描いていましたが、JPanel上でクリックするとGraphics2D/GeneralPathオブジェクトを取得したいと思います。JPanelをクリックしたときにグラフィックコンポーネントを選択
-1
A
答えて
1
私は、私はあなたが描く
ArrayList
Shape
のオブジェクトを保持する必要があるのJPanel
上でそれをクリックしたときのGraphics2D/GeneralPathオブジェクトを取得します。次に、MouseListenerでマウスポイントを取得し、Shape.contains(...)
メソッドを使用して、マウスクリックが描画されたShape
にあるかどうかを判断できます。
Draw On Component
の例は、ArrayListからオブジェクトをペイントして開始する概念を示しています。
編集:
Shape.contains(...)
方法はラインのために動作しません。
ここでは、Line2DオブジェクトとPointにcontains(...)メソッドを簡単に書き込む方法を示します。実際の生活の中でどの程度正確かはわかりません。
import java.awt.*;
import java.awt.geom.*;
class LineContains
{
public static void main(String...args)
{
Point point = new Point(10, 19);
Line2D.Double line = new Line2D.Double(0, 0, 10, 20);
boolean result = LineContains.contains(line, point);
System.out.println(result);
}
static boolean contains(Line2D line, Point point)
{
double[] location = new double[6];
PathIterator pi = line.getPathIterator(null);
pi.currentSegment(location);
int x1 = (int)location[0];
int y1 = (int)location[1];
pi.next();
pi.currentSegment(location);
int x2 = (int)location[0];
int y2 = (int)location[1];
double xDelta = x2 - x1;
double yDelta = y2 - y1;
double iterations = Math.max(Math.abs(xDelta), Math.abs(yDelta));
double xMultiplier = xDelta/iterations;
double yMultiplier = yDelta/iterations;
for (int i = 0; i < iterations; i ++)
{
int x = (int)Math.round(x1 + (i * xMultiplier));
int y = (int)Math.round(y1 + (i * yMultiplier));
//System.out.println(x + " : " + y);
if (x == point.x
&& y == point.y)
return true;
}
return false;
}
}
関連する問題
- 1. 外側をクリックしたときに選択ボックスを閉じる
- 2. サムネイルをクリックしたときの組み合わせを選択
- 3. JPanelがJComboBoxで選択したときに更新されない
- 4. jComboBoxは、選択したアイテムを選択したときに選択項目を最初に選択します
- 5. jQuery - 選択オプションを削除:クリック時に選択した属性
- 6. php:ボタンをクリックして選択 "選択"をクリック
- 7. JPanelでクリックしたJavaコンポーネント -
- 8. 背面のJPanel親を選択
- 9. マウスをクリックしたときにラジオボタンが選択されていませんか?
- 10. クリックしてjQueryまたは選択した通知ボタンを選択
- 11. JToggleButtonをクリックしたときに表示されるJPanelが必要です
- 12. JButtonがクリックされたときに親JPanelを削除します。
- 13. ラベル外でクリックしたときにwpfチェックボックスが選択された
- 14. Extjs4 Ext.view.View selectイベントの選択イベントトリガー選択項目を選択したとき
- 15. リストボックスを変更したときに選択されたテキストボックスの選択解除
- 16. ページの読み込み中に、選択したdivのコンテンツを非表示にします。クリックしてdivとそのコンテンツを選択したとき
- 17. ボタンテンプレートのスタイルを選択したとき
- 18. 選択したインデックスが選択されたときに選択されたアラートをポップアップする方法
- 19. XSLTは、選択したときに、リスト
- 20. jQueryオプションが既に選択されているときにクリック発射時に変更を選択します。
- 21. oracleは、選択したときに変数を選択します。
- 22. 別のオブジェクト(JPanel)とツリーノードの選択を結ぶ
- 23. Materialize Css - オプションを選択したときに複数のスクロールを選択
- 24. 選択したSELECTオプションをクリックし、値に移動します
- 25. PrimeNG Datatableクリックして行を選択/選択解除します
- 26. ドロップダウンが選択されてラジオボタンがクリックされたときにdivを表示
- 27. 振るまいドロップダウンを選択するときにクリックまたは矢印キー
- 28. 行がクリックされたときにブートストラップスタイルテーブル内の行を選択する
- 29. JButtonをクリックして選択したままにすると、テキストをスタイルする
- 30. TextEditに「選択されたテキスト」を左クリックしてコンテキストメニューを開きます
私がクリックした場所に関係なく、ポイント座標は常に整数値であり、contains()メソッドは常にfalseを返すため、現在私にとってはうまくいきません。 –
@LinxuanMichaelYang、 'Shape.contains(...)'のような行は動作しません。編集を参照してください。 – camickr
非常に残念ながら、これはまだ動作していない、とにかく –