Nano Hash - криптовалюты, майнинг, программирование

Почему JavaFX получает события мыши только один раз?

Я работаю над приложением, в котором я могу перетаскивать ImageView куда угодно на сцену. Когда я запускаю приложение, оно отлично работает в первый раз, когда я перетаскиваю ImageView, но не отвечает после того, как я его отпускаю.

Вот мой контроллер FXML:

@FXML
private ImageView card;

@FXML
private void handleCardMousePressed(MouseEvent event) {
    System.out.println("Drag Entered");
    DropShadow dropShadow=new DropShadow();
    dropShadow.setColor(Color.rgb(18,139,237));
    dropShadow.setSpread(.48);
    card.setEffect(dropShadow);
    card.setMouseTransparent(true);
    event.consume();
}

@FXML
private void handleCardMouseDragged(MouseEvent event){
    System.out.println("In Drag");
    card.setLayoutX(event.getSceneX());
    card.setLayoutY(event.getSceneY());
    event.consume();
}
@FXML
private void handleCardMouseReleased(MouseEvent event){
    System.out.println("Exit Drag");
    card.setEffect(null);
    event.consume();
}

Видео того, что происходит


Ответы:


1

Не устанавливайте mouseTransparent в true в методе handleMouseCardPressed.

Если вам нужно сделать это по какой-то другой причине (я не понимаю, почему вы это сделаете), то в handleCardMouseReleased(...) вам нужно установить mouseTransparent обратно в false:

    card.setMouseTransparent(false);

Полный пример:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.effect.DropShadow;
import javafx.scene.image.ImageView;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;

public class DragImageViewExample extends Application {

    private ImageView card;

    @Override
    public void start(Stage primaryStage) {
        Rectangle rect = new Rectangle(30, 30, Color.CORAL);
        card = new ImageView(rect.snapshot(null, null));

        card.setOnMousePressed(this::handleCardMousePressed);
        card.setOnMouseDragged(this::handleCardMouseDragged);
        card.setOnMouseReleased(this::handleCardMouseReleased);

        Pane pane = new Pane(card);
        Scene scene = new Scene(pane, 600, 400);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    private void handleCardMousePressed(MouseEvent event) {
        System.out.println("Drag Entered");
        DropShadow dropShadow=new DropShadow();
        dropShadow.setColor(Color.rgb(18,139,237));
        dropShadow.setSpread(.48);
        card.setEffect(dropShadow);
        event.consume();
    }

    private void handleCardMouseDragged(MouseEvent event){
        System.out.println("In Drag");
        card.setLayoutX(event.getSceneX());
        card.setLayoutY(event.getSceneY());
        event.consume();
    }

    private void handleCardMouseReleased(MouseEvent event){
        System.out.println("Exit Drag");
        card.setEffect(null);
        event.consume();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
23.03.2015
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..