Get all text field values ​​and id in javafx

I have an anchor panel with many text fields and other controls. I want to accept the values ​​of all controls and their names and identifiers.

For example: how can I delete all text field values?

+6
source share
3 answers

A direct solution would be to simply move all AnchorPane children and look for TextFields:

for (Node node : anchorPane.getChildren()) { System.out.println("Id: " + node.getId()); if (node instanceof TextField) { // clear ((TextField)node).setText(""); } } 
+5
source

If you need a recursive way to test this,

 public class NodeUtils { public static <T extends Pane> Map<Node, Object> formValues(T parent) { return formValues(parent, new HashMap<>()); } private static <T extends Pane> Map<Node, Object> formValues(T parent, Map<Node, Object> map) { for (Node node : parent.getChildren()) { // Nodes - You can add more. if (node instanceof TextField) { map.put(node, ((TextField) node).getText()); } if (node instanceof PasswordField) { map.put(node, ((PasswordField) node).getText()); } if (node instanceof TextArea) { map.put(node, ((TextArea) node).getText()); } if (node instanceof CheckBox) { map.put(node, ((CheckBox) node).isSelected()); } // Recursive. if (node instanceof Pane) { formValues((Pane) node, map); } } return map; } } 

Testing source

 Map<Node, Object> formValues = NodeUtils.formValues(source); 

Get only nodes

 public class NodeUtils { public static ArrayList<Node> getAllNodes(Parent root) { ArrayList<Node> nodes = new ArrayList<>(); addAllDescendents(root, nodes); return nodes; } private static void addAllDescendents(Parent parent, ArrayList<Node> nodes) { // Get children. List<Node> children = Collections.EMPTY_LIST; if (parent instanceof ButtonBar) { children = ((ButtonBar) parent).getButtons(); } else if (parent instanceof TabPane) { for (Tab tab : ((TabPane) parent).getTabs()) { Node tabContent = tab.getContent(); if (tabContent instanceof Parent) { addAllDescendents((Parent) tab.getContent(), nodes); } else { // You can log and get a type that is not supported. } } } else { children = parent.getChildrenUnmodifiable(); } // Add nodes. for (Node node : children) { nodes.add(node); if (node instanceof Parent) { addAllDescendents((Parent) node, nodes); } } } } 

Testing source

 List<Node> nodes = NodeUtils.getAllNodes(aPaneOrAnotherParentObject); 
+3
source

Here is the version of Java 8:

 anchorPane.getChildren() .filtered(node -> node instanceof TextField) .forEach(node -> ((TextField)node).setText("")); 
+3
source

Source: https://habr.com/ru/post/957473/


All Articles