setOnMouseExited / Entered的奇怪行为

时间:2014-11-29 20:22:43

标签: java javafx javafx-8

我有一个由盒子组成的网格。 Box扩展区域,只有背景和pref大小。 我把听众放在每个盒子上以便在mouseEntered时改变背景,问题是听众不要停下来。如果我在控制台中打印一些内容,如果我在盒子内移动鼠标,它就会继续这样做。我先搜索了一下,发现我可以使用setDisable和setMouseTransparent,但没有运气。 Witch setDisable我不再处于永久循环中,但颜色不会改变(或者它快速恢复到原始颜色,即使我不退出框中也是如此小鼠)

                c.setOnMouseExited(new EventHandler<MouseEvent>() {

                @Override
                public void handle(MouseEvent event) {

                    c.setStyle("-fx-background-color: darkgray");
                    c.setDisable(true);
                    event.consume();
                }
            });
            c.setOnMouseEntered(new EventHandler<MouseEvent>() {

                @Override
                public void handle(MouseEvent event) {
                    c.setStyle("-fx-background-color: white");
                    System.out.println("test");
                    c.setDisable(true);
                    event.consume();
                }
            });

忘了提它,但是c是一个盒子,盒子类扩展了Region

1 个答案:

答案 0 :(得分:1)

我无法重现您描述的行为。但是,还有另一种方法可以满足您的需求。

如果您在c.getStyleClass().add("box");构造函数中的框(getStyleClass().add("box");Box)中添加样式类,那么您只需在外部CSS文件中添加以下内容:

.box {
    -fx-background-color: white ;
}
.box:hover {
    -fx-background-color: darkgrey ;
}

然后完全摆脱鼠标处理程序。