You don't need to create your own classes at all.
You can just reference the items directly.
You wouldn't make a call like the following:
for numerous reasons:
1. hBox1 isn't a member of VBox. It would be a child, so, to get it you could do vBox.getChildren().get(0).
2. If you are writing it in code, you normally build the UI from the inner most item up (e.g. create the button, then the hBox, then the VBox). When you do this you directly have a reference to the button.
3. Because you will have a direct reference to bt1, then you can just reference it directly to call methods on it:
There are also alternatives to creating classes. An often used one is just to use a factory method:
4. You can lookup items deep in the scene graph using a css selector via node.lookup("selector"); (after applyCSS() and layout() calls have been made).
Now, that is not to say that you will never create your own classes encapsulating controls. Often that makes sense. It's just to show you that there are alternatives. When you do create your own classes it would be for the standard reasons you do so in Object Oriented programming: encapsulation, inheritance,
polymorphism, etc. Of those, encapsulation is by far the most commonly used reason, with inheritance and polymorphism usually being used far less in practice.
The preferred alternative for large apps is usually to use FXML and a controller to represent elements.
https://docs.oracle.com/javase/8/javafx/get-started-tutorial/fxml_tutorial.htm
https://docs.oracle.com/javase/8/javafx/fxml-tutorial/
https://docs.oracle.com/javase/8/javafx/fxml-tutorial/custom_control.htm
https://docs.oracle.com/javase/8/javafx/api/javafx/fxml/doc-files/introduction_to_fxml.html
Note, when you use FXML, the @FXML annotation will directly inject references to all FXML created nodes into the FXML controller, so the controller code can directly reference them. It can also directly assign event handlers by, for example, setting `onAction="#eventHandlerName"` in the FXML and defining `public void eventHandlerName(ActionEvent event) {}` in the Controller.
For advanced users, if you are writing a general purpose widget to be used in a library, then creating a control with a skin can be an option:
https://wiki.openjdk.java.net/display/OpenJFX/UI+Controls+Architecture