これは私のコードです: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");
}
});
}
これらの両方が間違っている:あなたが設定されているがイベントハンドラ内のイベントハンドラしたがって、あなたの「マウスクリック」バージョンでも、テキスト領域内をクリックした2回目以降のメッセージしか表示されません。私は、マウスの押されたハンドラがまったく動作しない理由は、何らかの理由でテキスト領域がマウスの押されたイベントを消費することだと思います。とにかく、低レベルのマウスイベントハンドラをテキストエリアに登録するのはなぜですか?実際に何をしようとしていますか? –
TextAreaで選択したテキストのキャレット位置をMouse Pressed to Mouseリリース時点から取得しようとしています。そして、はい、あなたはマウスクリックされたバージョンについて正しいです。このコードは冗長ですか? 'txtconfig.setOnMouseClicked(新しいイベントハンドラ(){ @Override公共ボイドハンドル(MouseEventのイベント){ }});' –
はい、そのコードは冗長です。しかし、単に['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)(正確に何をしたいかによって異なります)ではなく、マウスイベント? (あなたのコードは、キーボードでテキストを選択した場合、あなたのコードは何もする機会がまったくありません)。 –