Java SetOnMouseExit/Entered的奇怪行为
我有一个由盒子组成的网格。框扩展了区域,并且只有背景和pref大小。 我把监听器放在每个盒子上,以便在鼠标移动时改变背景,问题是监听器没有停止。如果我在控制台中打印一些东西,如果我在框中移动鼠标,它会一直这样做。我首先搜索了一下,发现我可以使用setDisable和setMouseTransparent,但运气不好。Witch setDisable我不再处于永久循环中,但颜色不会改变(或者很快恢复到原始颜色,即使我没有用鼠标退出框)Java SetOnMouseExit/Entered的奇怪行为,java,javafx,javafx-8,Java,Javafx,Javafx 8,我有一个由盒子组成的网格。框扩展了区域,并且只有背景和pref大小。 我把监听器放在每个盒子上,以便在鼠标移动时改变背景,问题是监听器没有停止。如果我在控制台中打印一些东西,如果我在框中移动鼠标,它会一直这样做。我首先搜索了一下,发现我可以使用setDisable和setMouseTransparent,但运气不好。Witch setDisable我不再处于永久循环中,但颜色不会改变(或者很快恢复到原始颜色,即使我没有用鼠标退出框) c.setOnMouseExited(新的EventHandl
c.setOnMouseExited(新的EventHandler(){
@凌驾
公共无效句柄(MouseeEvent事件){
c、 设置样式(“-fx背景色:暗灰色”);
c、 设置禁用(true);
event.consume();
}
});
c、 SetOnMouseCentered(新事件处理程序(){
@凌驾
公共无效句柄(MouseeEvent事件){
c、 设置样式(“-fx背景色:白色”);
系统输出打印(“测试”);
c、 设置禁用(true);
event.consume();
}
});
忘记提到它了,但是c是一个box,box类扩展了Region我无法重现您描述的行为。然而,还有另一种方法可以满足您的需求 如果将样式类添加到框中(
c.getStyleClass().add(“box”);
或仅在box
构造函数中添加getStyleClass().add(“box”);
),则只需在外部CSS文件中添加以下内容:
.box {
-fx-background-color: white ;
}
.box:hover {
-fx-background-color: darkgrey ;
}
然后完全摆脱鼠标处理程序。只需在处理程序中设置样式(不调用setDisable()
或event.consume()
)就可以了。你能创建一个演示问题的模型吗?
.box {
-fx-background-color: white ;
}
.box:hover {
-fx-background-color: darkgrey ;
}