2017-07-19 10 views
0

イベントハンドラをステージのタイトルバーに追加しようとしていますが、動作しません。JavaFX - イベントハンドラをステージのタイトルバーに追加

私はこれを使用してみました:

primaryStage.addEVentHandler(MouseEvent.MOUSE_PRESSED, (event)->{ 
    System.out.println("ok"); 
}); 

しかし、それだけでシーンのエリアにイベントを登録し、タイトルバー上でマウスを押すイベントを読みません。

ステージのタイトルバーでマウスイベントを聴く方法はありますか?

完全なコード:

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.input.MouseEvent; 
import javafx.scene.layout.HBox; 
import javafx.scene.text.Text; 
import javafx.stage.Stage; 

public class demo extends Application { 

    @Override 
    public void start(final Stage primaryStage) { 
     HBox box = new HBox(); 
     Scene scene = new Scene(box, 350, 250); 

     Text text = new Text("Test"); 
     box.getChildren().add(text); 

     primaryStage.addEventHandler(MouseEvent.MOUSE_PRESSED,(event) -> { 
      System.out.println("ok"); 
     }); 
     primaryStage.setScene(scene); 
     primaryStage.setTitle("TimePicker"); 
     primaryStage.show(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    }  
} 

答えて

0

私の知る限りでは、これは、基盤となるOSによって決定され、ユーザはタイトルバーとの対話から、特定の行動を期待して、ことはできません。タイトルバーでマウスイベントを処理し始めると、この予想される動作に干渉するようになります。

これは、primaryStage.initStyle(StageStyle.UNDECORATED);を設定することによってタイトルバーを隠すことによって、あなた自身のタイトルバーを実装することができ、それはあなたのカスタム動作を提供すると言いました。

0

システムのデフォルトのタイトルバーで何をするのか分かりませんでした。これはノードではなく、負の座標空間で応答しません。

考えられる回避方法:独自のタイトルバーを作成してください!

メインステージを作成し、StageStyle.UNDECORATEDとしてスタイルを設定します。

BorderPaneのようなルートペインを使用して、上部に独自のタイトルバーを作成します。

UNDECORATEDステージをドラッグ可能にする(基本的にはBorderPaneの先頭をドラッグする)ためのlinkを参照してください。

幸運を祈る!

+0

次に、どのコンボボックスがポップアップを隠すのですか? – KeepMove

+0

申し訳ありませんが、ポップアップは何ですか? – Eric

+0

この画像に表示されているような電子メールを含む領域http://docs.oracle.com/javafx/2/ui_controls/img/combobox-simple.png – KeepMove

関連する問題