2017-07-25 14 views
0

これは私のコードです:FXMLでJavaFXのTextAreaでMouse Pressedイベントが機能しないのはなぜですか?

@FXML private TextArea txtconfig; 
public void handleMousePressed(MouseEvent mouseEvent) { 
     txtconfig.setOnMousePressed(new EventHandler<MouseEvent>() { 
      @Override 
      public void handle(MouseEvent event) { 
       System.out.println("PRESSED"); 
      } 
     }); 
    } 

TextArea fx:id="txtconfig" style="-fx-font-size:10pt; -fx-font-family:Consolas" 
       maxWidth="Infinity" maxHeight="Infinity" VBox.vgrow="ALWAYS" 
       onMousePressed="#handleMousePressed"/> 

しかし、setOnMouseClickedは同じすべてを保っ取り組んでいます。 FXMでは、onMousePressedのみがonMouseClickedに変更されます。

public void handleMouseClicked(MouseEvent mouseEvent) { 
     txtconfig.setOnMouseClicked(new EventHandler<MouseEvent>() { 
      @Override 
      public void handle(MouseEvent event) { 
       System.out.println("Clicked"); 
      } 
     }); 

    } 
+1

これらの両方が間違っている:あなたが設定されているがイベントハンドラ内のイベントハンドラしたがって、あなたの「マウスクリック」バージョンでも、テキスト領域内をクリックした2回目以降のメッセージしか表示されません。私は、マウスの押されたハンドラがまったく動作しない理由は、何らかの理由でテキスト領域がマウスの押されたイベントを消費することだと思います。とにかく、低レベルのマウスイベントハンドラをテキストエリアに登録するのはなぜですか?実際に何をしようとしていますか? –

+0

TextAreaで選択したテキストのキャレット位置をMouse Pressed to Mouseリリース時点から取得しようとしています。そして、はい、あなたはマウスクリックされたバージョンについて正しいです。このコードは冗長ですか? 'txtconfig.setOnMouseClicked(新しいイベントハンドラ(){ @Override公共ボイドハンドル(MouseEventのイベント){ }});' –

+0

はい、そのコードは冗長です。しかし、単に['selectionProperty'](http://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/TextInputControl.html#selectionProperty)または[ 'caretPositionProperty'](http://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/TextInputControl.html#caretPositionProperty)(正確に何をしたいかによって異なります)ではなく、マウスイベント? (あなたのコードは、キーボードでテキストを選択した場合、あなたのコードは何もする機会がまったくありません)。 –

答えて

0

this answerで示唆したように、あなたが本当に(コントロール自体によって消費されているようだ)MousePressedイベントが必要な場合は、あなたがÈventFilterをインストールすることができます:

txtconfig.addEventFilter(
    MouseEvent.MOUSE_PRESSED, 
    new EventHandler<MouseEvent>() { 
     @Override 
     public void handle(MouseEvent event) { 
      System.out.println("PRESSED"); 
     } 
    } 
); 
+0

私はこれを先に試しましたが、コメント内の@James_Dによって通知されたようにイベントハンドラにイベントハンドラを設定していましたので、動作していませんでした。私はFXMLからonMousePressedを削除し、initialize()メソッドでEventFilterを追加しました。将来の参照のためにあなたの答えにこれを明記してください。 –

関連する問題