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

在这种情况下,如何使setOnMouseDragOver工作?

荀增
2023-03-14

事件处理程序添加到GameGui.java类的GridPane中,从第82行开始。

基本上,我试图找到您在网格窗格中拖动这个对象的任何节点的索引。通过将SetonMouseEnter应用到gridpane中的每个节点,我可以在不拖动的情况下完成这一任务,但是当我试图利用SetonMouseDragEnter时,我什么也没有得到。

有人有办法让这个工作吗?

这些是我应用于GridPane中节点的事件处理程序。

    for (int i=0; i<=11; i++) {
        for (int j=0; j<=11; j++) {

            int colIndex = i;
            int rowIndex = j;

            grid2[i][j] = new Rectangle();
            grid2[i][j].setStroke(Color.BLACK);
            grid2[i][j].setFill(null);
            grid2[i][j].setStrokeWidth(1);
            grid2[i][j].setWidth(30);
            grid2[i][j].setHeight(30);
            //Prints index of each grid2[][] upon mouse entry.
            grid2[i][j].setOnMouseEntered( e -> {
                System.out.printf("Mouse entered cell [%d, %d]%n", colIndex, rowIndex);
            });
            //Does not work! Want to print index of each grid2[][] upon mouse drag enter.
            grid2[i][j].setOnMouseDragEntered( e -> {
                System.out.printf("Mouse entered cell [%d, %d]%n", colIndex, rowIndex);
            });
            //Does not work! Want to print index of each grid2[][] upon mouse drag over.
            grid2[i][j].setOnMouseDragOver( e -> {
                System.out.printf("Mouse entered cell [%d, %d]%n", colIndex, rowIndex);
            });

这些是当您按下其中一个按钮时创建的对象的事件处理程序

private EventHandler<MouseEvent> onMousePressedEventHandler = event -> {
    if (event.getSource() instanceof Rectangle) {
        shipSelected = (Rectangle) (event.getSource());

        dragContext.x = shipSelected.getTranslateX() - shipSelected.getWidth()/2;
        dragContext.y = shipSelected.getTranslateY() - shipSelected.getHeight()/2;
    }
};


private EventHandler<MouseEvent> onMouseDragDetectedEventHandler = event -> {
    shipSelected.startFullDrag();

    System.out.println("startfulldrag");
};


private EventHandler<MouseEvent> onMouseDraggedEventHandler = event -> {
    if (event.getSource() instanceof Rectangle) {
        shipSelected = (Rectangle) (event.getSource());

        shipSelected.setX(dragContext.x + event.getX());
        shipSelected.setY(dragContext.y + event.getY());

    }
};

共有1个答案

松增
2023-03-14

在拖动时,您需要使鼠标移动的矩形setmouseTransparent(true)透明。

private EventHandler<MouseEvent> onMouseDragDetectedEventHandler = event -> {
    shipSelected.startFullDrag();
    shipSelected.setMouseTransparent(true)
    System.out.println("startfulldrag");
};

否则,矩形始终是鼠标指针下最顶部的元素,您将无法从下面的元素(即网格)获得dragEntered事件。

当然,不要忘记将鼠标透明度设置为false,当你结束拖动时。

 类似资料:
  • 这是我的建筑。格雷德尔: 我试图找出问题所在,使用以下代码来分析问题: 结果是:

  • 我在使用fs.readfile进行同步时遇到了一个问题,他们没有在第一次初始化,如果我再次尝试请求,那么我就有结果了。我知道我可以用promise和我从Kriskowal找到一些有用的东西。我试过但没有成功。我不太明白如何实施它。如果有人能帮忙,我将永远感激。 代码:

  • 问题内容: 我是T-SQL命令的新手,所以我在SQL逻辑中找到了一个可以使用它并想要对其进行测试的地方,但无法弄清楚我应该如何使用它: 请提出正确的用法。谢谢! 问题答案: 您在帮助中了吗?这是一个简单的例子:

  • 问题内容: 我有PK,它是自增密钥。我需要将记录插入数据库中,然后取回该PK并在另一个插入中使用它。 但是,我想在一次交易中做到这一点。那可能吗。这样的想法是,如果我必须执行的任何更新/插入都失败了,那么我可以回滚所有内容,但是我的印象是我需要进行一次提交。 我本来打算先在ado.net上执行此操作,然后切换到存储过程,因为我认为这可能会解决此问题。 SP在这种情况下会帮助我吗? 问题答案: 是的

  • 我在一个DB中有两个表(和),它们每个都有一个称为的相互列。 我当前使用以下代码仅从中导入一些数据(,): 如果我也想从导入数据(例如,名为和的列),那么我应该向该代码添加什么? 我的目标是拥有这些钥匙: 编辑: 编辑2: 仍然得到一个错误:

  • 我创建了龙卷风服务器,它接受python和matlab代码并执行它。这是服务器代码。 我用来访问的客户代码是,这里 我关心的是保持执行的顺序,这样python代码只有在matlab完成后才能执行。我使用jupyter_client来执行matlab/python代码。我在这里使用python27。问题是当我提交代码时,它抛出< code > type error:' NoneType ' obje