透明图像中的javafx鼠标事件

时间:2018-08-23 17:18:05

标签: javafx

JavaFx ImageView不会触发鼠标事件,例如在单击或拖动透明像素时按下或拖动,是否可以解决此问题并从透明区域检测鼠标事件?

我有这张图片enter image description here

我添加到这个非常简单的JavaFX场景enter image description here

中的

使用名为View的ImageView,我想通过Mouse Drag事件移动它 所以我写了这段代码

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class Main extends Application{

    double initMx, initMy,initX, initY;

    @Override
    public void start(Stage ps) throws Exception {
        StackPane pane = new StackPane();
        Image im = new Image("0.png");
        ImageView view = new ImageView(im);
        double fact = im.getWidth() / im.getHeight();

        view.setFitHeight(300);
        view.setFitWidth(300 * fact);

        view.setOnMousePressed(e->{
            initX = view.getTranslateX();
            initY = view.getTranslateY();
            initMx = e.getSceneX();
            initMy = e.getSceneY();
        });

        view.setOnMouseDragged(e->{
            double dx = initMx - e.getSceneX();
            double dy = initMy - e.getSceneY();

            double nx = initX - dx;
            double ny = initY - dy;

            view.setTranslateX(nx);
            view.setTranslateY(ny);

        });

        pane.getChildren().add(view);

        Scene scene = new Scene(pane, 500, 500);

        ps.setScene(scene);
        ps.show();

    }

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

到目前为止,此代码可以正常运行, 但是如果你在他的耳朵下方(或任何透明的地方)按下或拖动它不会发生!如何解决这个问题!

3 个答案:

答案 0 :(得分:3)

更自然,最简单的解决方案是将边界选择设置为true。

view.setPickOnBounds(true);

答案 1 :(得分:1)

您可以通过将图像设置为Button中的图形来实现此目的

button.setGraphics(new ImageView(im));

注意:添加ImageView后,您需要通过将按钮背景设置为透明背景颜色来删除按钮上的样式

答案 2 :(得分:0)

如果尚未尝试,请尝试以下操作:

   view.setOnMouseDragged(e->{
        double dx = initMx - e.getX();
        double dy = initMy - e.getY();