All Classes Namespaces Files Functions Variables
Functions.java
Go to the documentation of this file.
1 package fi.jyu.mit.fxgui;
2 
3 import java.util.ArrayList;
4 import java.util.List;
5 import java.util.function.Predicate;
6 
7 import javafx.scene.Node;
8 import javafx.scene.layout.Pane;
9 
10 /**
11  * Apufunktioita JavaFX-olioiden käsittelyyn
12  * @author vesal
13  * @version 6.3.2016
14  */
15 public class Functions {
16  /**
17  * Etsii kaikki ehdot täyttävät elementit containerin sisältä
18  * @param parent containeri, josta etsitään. Tätä ei lisätä listaan vaikka täyttäisi ehdon
19  * @param type mitä tyyppiä elementin on oltavat, esimerkksi Label.class
20  * jos halutaan kaikki, voi käyttää Node.class
21  * @param condition ehto, jolla elementti hyväksytään, esimerkkisi n -> "HA".equals(n.getId())
22  * @param recursive etsitäänkö rekursiivisesti
23  * @return lista ehdon täyttävistä elementeistä
24  */
25  @SuppressWarnings("unchecked")
26  public static <T> List<T> getNodes(Node parent, Class<T> type, Predicate<Node> condition, boolean recursive) {
27  List<T> elements = new ArrayList<>();
28 
29  if ( !(parent instanceof Pane) ) return elements;
30 
31  for (Node node : ((Pane)parent).getChildren()) {
32  if (type.isAssignableFrom(node.getClass()) && condition != null && condition.test(node) )
33  elements.add((T) node);
34  if (node instanceof Pane && recursive)
35  elements.addAll(getNodes((Pane) node, type, condition, recursive));
36  }
37  return elements;
38  }
39 
40 
41  /**
42  * Etsii ensimmäisen ehdon täyttävän elementin containerin sisältä
43  * @param parent containeri, josta etsitään. Tätä ei palauteta vaikka täyttäisi ehdon
44  * @param type mitä tyyppiä elementin on oltavat, esimerkksi Label.class
45  * jos halutaan kaikki, voi käyttää Node.class
46  * @param condition ehto, jolla elementti hyväksytään, esimerkkisi n -> "HA".equals(n.getId())
47  * @param recursive etsitäänkö rekursiivisesti
48  * @return ehdon täyttävä elementti tai null jos ei löydy
49  */
50  @SuppressWarnings("unchecked")
51  public static <T> T getNode(Node parent, Class<T> type, Predicate<Node> condition, boolean recursive) {
52  if ( !(parent instanceof Pane) ) return null;
53 
54  for (Node node : ((Pane)parent).getChildren()) {
55  if (type.isAssignableFrom(node.getClass()) && condition != null && condition.test(node) )
56  return (T)node;
57  if (node instanceof Pane && recursive) {
58  T result = getNode((Pane) node, type, condition, recursive);
59  if ( result != null ) return result;
60  }
61  }
62  return null;
63  }
64 
65 }