2016-07-06 2 views

答えて

1

座標系とポイントがNodeの内側に実際にあるかどうかを確認するためにNode.containsを使用Nodeにポイントを変換:

次の例では、すべてのチェック500ミリ秒、スクリーン座標(100、100)Buttonの境界

@Override 
public void start(Stage primaryStage) { 
    Button btn = new Button("Get (100, 100) in here"); 
    Point2D pt = new Point2D(100, 100); 

    Timeline timeline = new Timeline(new KeyFrame(Duration.seconds(0.5), evt -> 
      System.out.println(
        btn.contains(btn.screenToLocal(pt)) 
      ) 
    )); 
    timeline.setCycleCount(Animation.INDEFINITE); 
    timeline.play(); 

    StackPane root = new StackPane(); 
    root.getChildren().add(btn); 

    Scene scene = new Scene(root, 200, 50); 

    primaryStage.setScene(scene); 
    primaryStage.show(); 
} 
+0

それはボタンのために働いていますが、他のコントロールはどうですか?特定のメニューやツールバー、タブコントロールのヘッダーなどの天気をチェックする方法 –

+0

@AmitaPatil:これはNodeクラスのメソッドだけを使用し、あらゆる種類のノードに適用できます。ノードを特定のポイントの下に置くと、シーングラフを通してノードを検索する必要があります。マウスカーソルの下のノードを探したい場合は、[pickResult](https://docs.oracle .com/javase/8/javafx/api/javafx/scene/input/MouseEvent.html#getPickResult--)興味のあるノードを見つけるために、ノード階層に移動する必要があるかもしれません。それらにアクセスするための直接的な方法を提供し、CSSリファレンス内の適切なセレクタを参照すると役立ちます。 – fabian

0

java.awt.Rectangle変数を作成して、ボタンと領域の境界線をマークすることができます。次に、方法Rectangle#containsを使用して、該当するPointがこの領域内にあるかどうかをテストします。あなたがここにJavadocを参照したい場合があり

https://docs.oracle.com/javase/8/docs/api/java/awt/Rectangle.html

+0

K私は –

+0

それをしようと私は同じタブ・ヘッダーのための論理、メニューバー、ツールバーなどを適用することができますか? –

+0

この場合、これらの要素は 'Rectangle'で取り込むことのできない範囲にあるため、これを行うことはできません。しかし、努力する価値がある。メニューの設定方法によって異なります。 – Confiqure

0

に私はいるgetGraphics()functiを使用して、それを解決している場合on

`Node n = tabShapes.getGraphic();

System.out.println( "x =" + pt.x + "y =" + pt.y);

Point2D p =新しいPoint2D(pt.x、pt.y);

ブールF = n.contains(n.screenToLocal(P)); `

関連する問題