在 JavaFX 中是否有避免嵌套事件的巧妙方法?
Is there a clever way of avoiding nested events in JavaFX?
我有一个要按以下方式缩放的形状:
- 用户将鼠标移到形状上
- 他们点击 Control 键
- 他们使用鼠标滚动相应地放大和缩小。
这就是我解决这个问题的方法:(我不包括我的方法的实现作为唯一的想法,而不是实际的实现,是这个问题的主题):
public void addScaling(Shape shape)
{
shape.setOnMouseEntered(e ->
{
(shape.getScene()).setOnKeyPressed(e2 ->
shape.setOnScroll(e3 -> scalingMethod())
}
shape.setOnMouseExited(e ->
{
(shape.getScene()).setOnKeyPressed(null);
shape.setOnScroll(null);
}
}
但是,我对这段代码并不满意——它看起来很糟糕。
有没有更好的方法来解决这个问题?
据我所知,除非鼠标悬停在节点上,否则不会在节点上触发滚动事件。所以你只需要
shape.setOnScroll(e -> {
if (e.isControlDown()) {
scalingMethod();
}
});
如果您确实需要检查鼠标是否在形状上,请执行
shape.setOnScroll(e -> {
if (e.isControlDown() && shape.isHover()) {
scalingMethod();
}
});
我有一个要按以下方式缩放的形状:
- 用户将鼠标移到形状上
- 他们点击 Control 键
- 他们使用鼠标滚动相应地放大和缩小。
这就是我解决这个问题的方法:(我不包括我的方法的实现作为唯一的想法,而不是实际的实现,是这个问题的主题):
public void addScaling(Shape shape)
{
shape.setOnMouseEntered(e ->
{
(shape.getScene()).setOnKeyPressed(e2 ->
shape.setOnScroll(e3 -> scalingMethod())
}
shape.setOnMouseExited(e ->
{
(shape.getScene()).setOnKeyPressed(null);
shape.setOnScroll(null);
}
}
但是,我对这段代码并不满意——它看起来很糟糕。
有没有更好的方法来解决这个问题?
据我所知,除非鼠标悬停在节点上,否则不会在节点上触发滚动事件。所以你只需要
shape.setOnScroll(e -> {
if (e.isControlDown()) {
scalingMethod();
}
});
如果您确实需要检查鼠标是否在形状上,请执行
shape.setOnScroll(e -> {
if (e.isControlDown() && shape.isHover()) {
scalingMethod();
}
});