public static Binding<Boolean> containsFocus(Node node) { return EasyBind.monadic(node.sceneProperty()) .flatMap(Scene::focusOwnerProperty) .map(owner -> { for (Node n = owner; n != null; n = n.getParent()) { if (n == node) return true ; } return false ; }) .orElse(false); // when node.getScene() is null }
@Override public void invalidated(Observable o) { if (target.getScene() != null) { target.sceneProperty().removeListener(this); sceneConsumer.accept(target.getScene()); } } };
target.sceneProperty().addListener(sceneListener);
/** * Get the window property of a node * * @param n * the node the window property to observe * @return the property */ public static ObservableValue<Window> windowProperty(Node n) { ObjectProperty<Window> w = new SimpleObjectProperty<Window>(); ChangeListener<Window> l = (o, oldV, newV) -> w.set(newV); n.sceneProperty().addListener((o, oldV, newV) -> { if (oldV != null) { oldV.windowProperty().removeListener(l); } if (newV != null) { newV.windowProperty().addListener(l); } }); return w; }
/** * Get the window property of a node * * @param n * the node the window property to observe * @return the property */ public static ObservableValue<Window> windowProperty(Node n) { ObjectProperty<Window> w = new SimpleObjectProperty<Window>(); ChangeListener<Window> l = (o, oldV, newV) -> w.set(newV); n.sceneProperty().addListener((o, oldV, newV) -> { if (oldV != null) { oldV.windowProperty().removeListener(l); } if (newV != null) { newV.windowProperty().addListener(l); } }); return w; }
private C cellForItem(T item) { C cell = cellPool.getCell(item); // apply CSS when the cell is first added to the scene Node node = cell.getNode(); EventStreams.nonNullValuesOf(node.sceneProperty()) .subscribeForOne(scene -> { node.applyCss(); }); // Make cell initially invisible. // It will be made visible when it is positioned. node.setVisible(false); if (cell.isReusable()) { // if cell is reused i think adding event handler // would cause resource leakage. node.setOnScroll(this::pushScrollEvent); node.setOnScrollStarted(this::pushScrollEvent); node.setOnScrollFinished(this::pushScrollEvent); } else { node.addEventHandler(ScrollEvent.ANY, this::pushScrollEvent); } return cell; }
public static void bindToStageTitle(Node n, StringProperty property) { ChangeListener<Window> windowListener = (observable, oldValue, newValue) -> { if (oldValue != null && oldValue instanceof Stage) { ((Stage) oldValue).titleProperty().unbindBidirectional(property); } if (newValue != null && newValue instanceof Stage) { ((Stage) newValue).titleProperty().bindBidirectional(property); } }; n.sceneProperty().addListener((observable, oldValue, newValue) -> { if (oldValue != null) { oldValue.windowProperty().removeListener(windowListener); } if (newValue != null) { newValue.windowProperty().addListener(windowListener); if (newValue.getWindow() != null && newValue.getWindow() instanceof Stage) { ((Stage) newValue.getWindow()).titleProperty().bindBidirectional(property); } } }); if (n.getScene() != null) { n.getScene().windowProperty().addListener(windowListener); } }
public static void registerListenerForWindowFocus(Node n, InvalidationListener l) { ChangeListener<Window> windowListener = (observable, oldValue, newValue) -> { if (oldValue != null) { oldValue.focusedProperty().removeListener(l); } if (newValue != null) { newValue.focusedProperty().addListener(l); } }; n.sceneProperty().addListener((observable, oldValue, newValue) -> { if (oldValue != null) { oldValue.windowProperty().removeListener(windowListener); } if (newValue != null) { newValue.windowProperty().addListener(windowListener); if (newValue.getWindow() != null) { newValue.getWindow().focusedProperty().addListener(l); l.invalidated(newValue.getWindow().focusedProperty()); } } }); if (n.getScene() != null) { n.getScene().windowProperty().addListener(windowListener); } }
public static void registerListenerForStageFullscreen(Node n, InvalidationListener l) { ChangeListener<Window> windowListener = (observable, oldValue, newValue) -> { if (oldValue != null && oldValue instanceof Stage) { ((Stage) oldValue).fullScreenProperty().removeListener(l); } if (newValue != null && newValue instanceof Stage) { ((Stage) newValue).fullScreenProperty().addListener(l); } }; n.sceneProperty().addListener((observable, oldValue, newValue) -> { if (oldValue != null) { oldValue.windowProperty().removeListener(windowListener); } if (newValue != null) { newValue.windowProperty().addListener(windowListener); if (newValue.getWindow() != null && newValue.getWindow() instanceof Stage) { ((Stage) newValue.getWindow()).fullScreenProperty().addListener(l); l.invalidated(((Stage) newValue.getWindow()).fullScreenProperty()); } } }); if (n.getScene() != null) { n.getScene().windowProperty().addListener(windowListener); } }
node.sceneProperty().addListener((observable, oldScene, newScene) -> { if(oldScene != null) { oldScene.getRoot().removeEventHandler(MouseEvent.MOUSE_MOVED, mouseMovedOutsideCircularPaneEventHandler);