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

JavaFX-如何在对象类型上使用ImageView方法?

丁弘新
2023-03-14

我正在尝试为鼠标拖动的事件创建一个EventHandler。我将使用同一个处理程序对多个ImageView执行相同的操作。这就是我所做的。

static EventHandler<MouseEvent> dragHandler = new EventHandler<MouseEvent>()    {
        @Override
        public void handle(MouseEvent e) {
            e.getSource().toFront();
            e.getSource().setTranslateX(e.getSceneX() );
            e.getSource().setTranslateY(e.getSceneY() );

        }

        };  

但显然,我不能使用toFront或setTranslate方法或任何我用于ImageView的方法,因为e.getSource返回一个对象,而这些是对象类型无法使用的ImageView方法。显然,我也不能简单地将其转换为ImageView

   (ImageView)( e.getSource() ).toFront();

我可以简单地使用内部类和lambda表达式,但我认为必须有一种更有效的方法,而不仅仅是对每个ImageView复制粘贴15次相同的行。如果有,请告诉我。

提前感谢。

共有1个答案

易自珍
2023-03-14

强制转换可以工作,但强制转换的优先级低于取消引用的优先级(),因此您的代码示例尝试向下转换(e.getSource())的结果。toFront(),它不起作用(因为它没有类型,因为toFront()是void)。

所以

((ImageView) e.getSource() ).toFront();

会有用的。

然而,通常最好为每个图像视图注册不同的处理程序。无需重复代码:只需使用任何标准编程技术即可避免重复代码。E、 g.你可以写一个方法:

private void registerEventHandler(ImageView imageView) {
    imageView.setOnMouseDragged(e -> {
        imageView.toFront();
        imageView.setTranslateX(e.getSceneX() );
        imageView.setTranslateY(e.getSceneY() );
    });

    // register other event handlers, as needed.
}

然后为每个图像视图调用该方法(如果在某些合适的数据结构中有循环)。

或者,您可以创建一个方法来创建图像视图并注册任何必要的处理程序。

除了可以说更干净的代码之外,这些技术还可以避免向下转换,这通常是一件好事。

 类似资料:
  • 我在我们公司做项目,我有一个注入对象的问题。让我们考虑一下我有这个实体提供商: 并使用上面的实体提供程序扩展JPAContainer 问题是(我理解),我无法使用类类型定义@Inject对象,因为Inject方法需要一个空构造函数。这里有什么解决方案吗?如何让它发挥作用?现在我得到了一个例外 非常感谢您的回答:)Ondrej

  • 有人能举一个简单的例子来说明如何设置EventHandler以在窗格(JavaFX)上拖动图像视图。对于拖动,我的意思是在图像上按下鼠标,拖动和图像应该跟随,然后释放鼠标,图像视图将停止在该位置。

  • 问题内容: 嗨,我将以下结构嵌套在一个更大的结构中,该结构是通过api调用返回的,但是我无法对这部分进行编码/解码。我遇到的问题是customKey和customValue都是动态的。 我尝试了类似的操作,但是显然不起作用,因为它实际上不是的数组。 问题答案: 由于您将我的答案链接到另一个问题,因此我将扩展该问题以回答您的问题。 事实是,如果您知道要查找的位置,那么所有键在运行时都是已知的: 用法

  • 当然,这段代码不起作用。因为get()和set()方法。我可以用那样的东西吗?

  • 我想通过spring data JPA中的查询方法从子类中获取数据。不想使用jpql或标准API。我想获得所有与指定accountType和User的连接。我知道jpql以及标准api将完成这项工作,但我想用JPA查询方法实现这一点。下面是我的实体和回购代码。 这是主实体类 下面是存储库 repo中的findByUserIdAndconnectionTypeAccountType方法不正确,所以我

  • 我是Oracle的初学者,我声明了这个对象类型: 我希望在我的存储过程中使用该对象: 但是当编译过程时,我得到了这个错误: 错误(2,14):PLS-00201:必须声明标识符“T1” 我怎样才能写出正确的程序?谢谢大家。