Ich erstelle derzeit eine App mit JavaFX, muss aber jetzt Knoten (Komponenten) dynamisch entfernen oder hinzufügen. Es gibt jedoch fast keine Informationen, die dem Knoten vom Wurzelknoten zum unteren Knoten folgen könnten. Daher werden wir die Methode durch Ausprobieren beschreiben. (Im Moment werde ich nur die Komponenten auflisten, die ich überprüft habe.)
Umgebung OS : macOS X Catalina Integrierte Entwicklungsumgebung: Eclipse 2019-12 Java : AdoptOpenJDK 11.0.5 JavaFX : 11.0.2 SceneBuilder : 11.0
NodeTree
1:AnchorPane ← Wurzelknoten ①
2: ┣━━━ MenuBar
3: ┣━┳━ AnchorPane ②
4: ┃ ┗━┳━ SplitPane ←Horizontal(Links und rechts geteilt) ③
5: ┃ ┣━━━ AnchorPane
6: ┃ ┗━━━ PieChart ④
7: ┗━━━ AnchorPane
Folgen Sie den Knoten in der Reihenfolge ① ⇢ ② ⇢ ⇢ ③ ⇢.
sample.java
1: public Scene setPieChart(Stage stage) {
2: Scene scene = stage.getScene();
3: AnchorPane ap2 = (AnchorPane)this.scene.getRoot(); ①
4: AnchorPane ap3 = (AnchorPane)ap2.getChildren().get(1); ②
5: SplitPane spHorizontal = (SplitPane)ap3.getChildren().get(0); ③
6: ObservableList<?> ol = (ObservableList<?>) spHorizontal.getItems(); ③
7: PieChart pieChart = (PieChart)ol.get(1); ④
8:
9: return scene;
10: }
Beachten Sie, dass Sie beim Versuch, einen untergeordneten Knoten von SplitPane abzurufen, ein ObservableList <?> Type object
mit getItems ()
wie in Zeile 5 erhalten.
In diesem Beispiel wird im Objekt "ObservableList <?> Type" das 0. Element auf "NodeTree ②AnchorPane" und das 1. Element auf "PieChart" gesetzt. Deshalb wird ol.get (1) in der 7. Zeile von sample.java ausgeführt.
Wenn der übergeordnete Knoten von PieChart ein Container wie AnchorPane ist, wird das gezeichnete Diagramm nicht entsprechend der Größe des Fensters skaliert. Daher wird das Kreisdiagramm direkt unter dem geteilten Bereich platziert.
Ein weiterer Ort, der erwischt werden könnte, ist "ScrollPane". Unter der Annahme, dass der untergeordnete Knoten von ScrollPane AnchorPane ist, lautet die Erfassungsmethode von AnchorPane wie folgt.
sample2.java
1: AnchorPane anchorPane = (AnchorPane) scrollPane.contentProperty().get();
Das ist vorerst alles. Auch wenn es notwendig wird, während der Entwicklung zu untersuchen, werde ich es hinzufügen.
Es dient auch als eigenes Memorandum, aber ich hoffe, es hilft allen.
Recommended Posts