如何在JavaFX中停止MouseEvent?

时间:2015-04-02 18:03:13

标签: javafx mouseevent

(抱歉我的英语不好)

我不知道如何在JavaFX中停止鼠标事件。

当我按下一个按钮然后按下大矩形时,此代码会将一个小图像生成一个大矩形,但如果再次按下该矩形,则会重建一个新图像。

我不想生成新图像,我该怎么做?

        button.setOnAction((ActionEvent t) -> {
        rectangle.setOnMouseClicked((MouseEvent me) -> {

            Rectangle asdf = new Rectangle(48, 48, Color.TRANSPARENT);

            StackPane imageContainer = new StackPane();
            ImageView image = new ImageView("firefox-icono-8422-48.png");
            imageContainer.getChildren().addAll(asdf, image);
            imageContainer.setTranslateX(me.getX());
            imageContainer.setTranslateY(me.getY());

            enableDragging(imageContainer);

            rootGroup.getChildren().add(imageContainer);
            myList2.add(imageContainer);

        });
    });

由于

PS:t.consume()和me.consume();什么都不做。

1 个答案:

答案 0 :(得分:1)

我不确定我是否正确解释了您的问题,但是如果您想"关闭"矩形上的鼠标单击处理程序,您只需调用

即可
rectangle.setOnMouseClicked(null);

完整示例:

import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;

public class ActivateRectangleWithButton extends Application {

    @Override
    public void start(Stage primaryStage) {
        Rectangle border = new Rectangle(100, 100, Color.TRANSPARENT);
        Rectangle rect = new Rectangle(80, 80, Color.CORNFLOWERBLUE);

        StackPane stack = new StackPane(border, rect);

        Button button = new Button("Activate");
        button.setOnAction(evt -> {
            border.setFill(Color.BLUE);
            rect.setOnMouseClicked(me -> {
                System.out.println("Active rectangle was clicked!");

                // de-activate:
                border.setFill(Color.TRANSPARENT);
                rect.setOnMouseClicked(null);
            });
        });

        VBox root = new VBox(20, stack, button);
        root.setAlignment(Pos.CENTER);
        Scene scene = new Scene(root, 300, 300);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

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