Если вы не сохраните поле другим способом, нет.Вы можете прикрепить несколько id
, чтобы найти узел с помощью селектора CSS (lookup
), но в этом случае вам лучше сделать это по-другому:
Храните узлы, к которым вам нужен доступ, в полях (или, наконец, окончательные локальные переменные, если вы регистрируете обработчики событий в той же области, где вы создаете узлы).
...
private BorderPane root;
private HBox top;
private Text total;
private FlowPane target;
public EventHandler<MouseEvent> fieldClicked = (MouseEvent e) -> {
ObservableList<Node> dices = target.getChildren();
/* Do some stuff with fields */
};
private void initializeNodes() {
...
total = new Text();
top = new HBox(total);
root.setTop(top);
target = new FlowPane();
root.setCenter(target);
...
}
Лучше, насколько это возможно, отделить модификацию определенных значений от макета сценыв любом случае, поскольку это облегчает вам перестановку сцены, не беспокоясь о том, что обработчики событий перемещаются по сцене правильно с помощью навигации вверх / вниз по сцене.Кроме того, у вас будут проблемы, если вы используете свой подход в тех случаях, когда вы используете «родителя», отличного от Pane
или Group
, например, ScrollPane
, поскольку обложка ScrollPane
вставляет content
узел в сцене как его потомок, но не как дочерний, и он не делает этого до первого прохода макета.
Кстати: обратите внимание, что Event.getSource
возвращает узел, для которого сработал обработчик событий, а не Event.getTarget
.