2016-12-13 9 views
1

私は非常に簡単な質問があります。私はjavafx eventページを検索しました。私はいくつかの細部を見落とすことがあります。とにかく私のコードを見れば、すべて正常に動作します。グループマウスイベントが発射されないJavafx

レイアウトをグループにラップしてレイアウトに直接追加するのではなく、layoutとcontentPaneの両方がマウスイベントの検出を停止しているようです。グループgがマウスイベントを取得していないイベント。

このような動作は正常ですか?どうして?

この件に関するお手伝いをさせていただきます。

package mouseeventtest; 

import javafx.application.Application; 
import javafx.scene.Group; 
import javafx.scene.Scene; 
import javafx.scene.layout.BorderPane; 
import javafx.scene.layout.Pane; 
import javafx.scene.layout.StackPane; 
import javafx.scene.paint.Color; 
import javafx.stage.Stage; 


public class MouseEventTest extends Application { 
    BorderPane layout; 

    @Override 
    public void start(Stage primaryStage) { 
     primaryStage.setTitle("Test Mouse Event"); 

     layout = new BorderPane(); 
     Pane contentPane = new StackPane(); 
     layout.setCenter(contentPane); 

     layout.setOnMousePressed(e ->{ System.out.println("layout.setOnMousePressed..."); }); 
     contentPane.setOnMousePressed(e -> { System.out.println("contentPane.setOnMousePressed..."); }); 

     //Group g = new Group(layout); 
     //g.setOnMousePressed(e -> { System.out.println("g.setOnMousePressed ..."); }); 
     //Scene scene = new Scene(g, 800, 800, Color.WHITE); 
     Scene scene = new Scene(layout, 800, 800, Color.WHITE); 

     scene.setOnMousePressed(e -> { System.out.println("scene.setOnMousePressed..."); }); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
     primaryStage.show(); 
    } 

    /** 
     * @param args the command line arguments 
     */ 
    public static void main(String[] args) { 
     launch(args); 
    } 

} 
+0

バグでしょうか? – Tania

答えて

1

、彼らがシーンのルートのときGroup sおよびRegion sはサイズ設定されている方法の違いは、(明らかに)があります。 Groupは、コンテンツを格納するのに十分な大きさになっています。 Regionはシーン全体にフィットするようにサイズが設定されています。シーングラフには基本的に(いくつかのコンテナ以外の)コンテンツがないので、グループの推奨サイズはゼロとして計算されます。したがって、マウスイベントを受け取るものは何もありません。

コンテンツにサイズを追加すると、

layout.setPrefSize(800, 800); 

次に、グループのマウスイベントが予想どおりに表示されます。

+0

ジェームズあなたは男です! :)私はstackoverflowに新しいです。私は答えとしてあなたの応答をマークしようとするが、どのようにわからない。とにかくそんなにありがとう。もっと読むべきです。 javafxドキュメントのどこにもそのような簡潔な説明はありません。ありがとうございました! – Tania

+0

@Tania答えを正しいとマークするには、その隣にあるチェックマークをクリックします。 –

+0

ちょうどそれをチェックしました。私はさらにテストをしました。 – Tania

関連する問題