当前位置: 首页 > 知识库问答 >
问题:

透明图像中的JavaFX鼠标事件

祖奇
2023-03-14

JavaFx ImageView不会触发鼠标事件,例如,如果您单击或拖动透明像素,则按或拖动鼠标事件,是否有办法解决此问题并从透明区域检测鼠标事件?

使用ImageView命名视图,我想用鼠标拖动事件移动它,所以我写了这段代码

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个答案

艾自强
2023-03-14

试试这个,如果你还没有:

   view.setOnMouseDragged(e->{
        double dx = initMx - e.getX();
        double dy = initMy - e.getY();
司徒啸
2023-03-14

您可以将此图像设置为按钮中的图形,如下所示

button.setGraphics(new ImageView(im));

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

逑兴安
2023-03-14

更自然、最简单的解决方案是将pick-on-bounds设置为true。

view.setPickOnBounds(true);
 类似资料:
  • 我想要一个舞台,是相同的大小,屏幕是完全透明的,接收鼠标事件在任何地方。在下面的示例中,我只在鼠标位于圆圈上方时才获得鼠标事件。我在使用Java 8U11的Windows XP和Windows 7上都看到了这个问题 有趣的是,如果我将填充颜色的alpha部分设置为它的绝对最小值,那么我会得到鼠标事件。然而,我不想使用这个变通方法,而是要真正深入到问题的底部。我的结论是,在JavaFX或Window

  • 我想制作一个JavaFX应用程序,它基本上用对象覆盖整个用户屏幕,因此基本上我可以在用户屏幕上绘制任何东西。 制作一个覆盖整个屏幕的窗口很简单。使其本质上透明可以通过本教程实现:https://assylias.wordpress.com/2013/12/08/383/ 所以唯一阻止我的是这样一个事实,尽管窗口是透明的,但它仍然会捕获用户的鼠标和按键事件。 有什么办法可以做到这一点吗?举一个更具体

  • 我试图拖动对象表示为PNG图像透明背景从AnchorPane到HBox。 我使用以下线条将图像设置为拖动视图: 对于不透明的背景图像,这一切都很好,但对于透明的图像,图像的背景是白色的,不透明度为“0.8”。 我尝试为节点拍摄快照: 但它不起作用,白色背景仍然存在。有没有其他方法可以让它像原始图像一样透明?

  • #klem1,#klem2 { opacity:0.4; filter:alpha(opacity=40); /* For IE8 and earlier */ } #klem1:hover,#klem2:hover { opacity:1.0; filter:alpha(opacity=100); /* For IE8 and earlier */ } div.background { widt

  • 问题内容: 所以我有两个图像,我想显示在彼此的顶部。这个 上面的图像应该是透明的,这样底部的图像是透明的 可见。 Here is my code so far: With the face in the bottom and the eyes on top. 问题答案: Try this 我没有你的两个源图像,所以我不能确定它将与工作 他们。如有任何问题,请提供两者的原件。

  • 有没有办法用java捕获双击鼠标事件后的图像?我只能在鼠标释放双击事件时捕获图像。但捕获图像不是双击事件后的图像。