Ich baue eine GUI mit Szenen-Generator, und die Mehrheit meiner Szenen haben ein Element gemeinsam (ein iOS-Typ-Home-Taste am unteren Rand). Ich frage mich, ob es möglich war, diese Komponente in einer separaten fxml-Datei zu definieren. Aus den von mir durchgeführten Untersuchungen gibt es einen ähnlichen Prozess für die Deklaration einer wiederverwendbaren Komponente, aber nur innerhalb derselben fxml-Datei. Wie könnte ich dieses Prinzip für mehrere fxml-Dateien anwenden?JavaFX - Wiederverwendbare FXML-Komponente
4
A
Antwort
0
Dies kann man auf jeden Fall erreichen, indem man eine separate FXML-Datei erstellt und ihr einen Knoten mit einer eindeutigen ID hinzufügt und dann über die ID auf diesen Knoten zugreift. Der schwierige Teil ist, wie man es anwendungsweit macht. wahrscheinlich die gleiche Funktion in vielen Ihrer Controller, aber hier ist, wie Sie eine a-Taste aus einer FXML-Datei erhalten würde.
Alle Tasten führen die gleiche Aktion aus?
Parent root = FXMLLoader.load(getClass().getResource("fileName.fxml"));
ObservableList<Node> nodes = root.getChildrenUnmodifiable();
String _id = "testButton";
for (Node node : nodes) {
if (node.getId().equals(_id)) {
return node;
}
}
return null;
}
2
Sie können wie folgt tun:
<AnchorPane xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.example.MainController">
<children>
<fx:include fx:id="someId" source="NestedFXML.fxml"/>
</children>
<AnchorPane xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.example.NestedFXMLController">
</AnchorPane>
Controller-Klassen:
public class MainController implements Initializable {
@FXML
private NestedFXMLController someIdController;
@Override
public void initialize(URL location, ResourceBundle resources) {
// TODO Auto-generated method stub
}
}
public class NestedFXMLController implements Initializable {
@Override
public void initialize(URL location, ResourceBundle resources) {
// TODO Auto-generated method stub
}
}
Nizza: Die verschachtelte Controller kann über FXML Anmerkung injiziert werden. Der Feldname muss mit der fx: id attribute string + "Controller" übereinstimmen!
Verwandte Themen
- 1. Wiederverwendbare Suchfunktion javafx
- 2. Alles wie recyclerview oder wiederverwendbare Ansichten für javafx
- 3. wiederverwendbare Komponente
- 4. Symfony 2 wiederverwendbare Bundles
- 5. Silverstripe 3.2 wiederverwendbare Blöcke
- 6. Symfony wiederverwendbare Dienste
- 7. Redux: Wiederverwendbare Aktionen
- 8. Wiederverwendbare LINQ-Methodenabfrage
- 9. JQuery wiederverwendbare Funktionen
- 10. Reagieren JS: Wiederverwendbare Komponenten
- 11. Wiederverwendbare summary_fields getter Silverstripe
- 12. Wiederverwendbare Tibco-Unterprozesse
- 13. Wiederverwendbare reaktivverdünnende Behälterkomponenten
- 14. grails: wiederverwendbare Authentifizierung Abfangjäger
- 15. Nginx config wiederverwendbare Blöcke
- 16. Wiederverwendbare verschachtelte VueJS-Komponenten
- 17. Wiederverwendbare TableViewCell asynchrone Höhe
- 18. Wiederverwendbare Komponente in reactjs
- 19. Wiederverwendbare * Taste * in Xcode
- 20. Erstelle wiederverwendbare Verbindungsleitungs-Pipelines
- 21. Wiederverwendbare Komponenten in AngularJS
- 22. wiederverwendbare Bedingung/Ausdruck Klassen
- 23. Wiederverwendbare benutzerdefinierte Zelle
- 24. RAML Definition wiederverwendbare Unterroute
- 25. Wiederverwendbare verschachtelte Makro in boo?
- 26. Wiederverwendbare Aufzählungstypen in JSON-Schema
- 27. Wiederverwendbare Funktion in AngularJS wiederverwenden
- 28. Wiederverwendbare XCTests für mehrere Produkte
- 29. wiederverwendbare Aktualisierungstoken für Dropbox API?
- 30. Versteckte, wiederverwendbare Blöcke in YAML
Wie wäre es mit einem BorderPane? Die Schaltfläche wird am unteren Rand und Sie ändern nur die Mitte mit Ihren fxml-Dateien. – GOXR3PLUS
Einfach und effektiv! Danke, ich habe nicht darüber nachgedacht. –