nie jestem w 100% pewien, że to jest odpowiedź na pytanie, jak jestem całkowicie zaznajomiony z XAML, ale mam nadzieję, że to jest ...
Próbka Realizacja
Prace próbki przez ustawienie model obiektu (osoba) do przestrzeni nazw programu ładującego FXML, który umożliwia użycie wyrażenia wiążącego w FXML w celu powiązania właściwości obiektu.
W próbce początkowo występuje kilka nazw w modelu i można modyfikować powiązaną listę w modelu za pomocą przycisków dodawania i usuwania w celu dodania lub usunięcia kilku dalszych nazw puszek na liście.

Cały kod idzie w pakiecie o nazwie sample.names.
imieniny display.fxml
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.ListView?>
<?import javafx.scene.layout.HBox?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.control.Button?>
<VBox xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.names.NameDisplayController">
<HBox prefHeight="150.0" prefWidth="220.0" spacing="5.0" >
<children>
<Label fx:id="firstNameLabel" text="${person.firstName}" />
<ListView fx:id="middleNameList" prefWidth="100.0" items = "${person.middleNames}" />
<Label fx:id="lastNameLabel" text="${person.lastName}" />
</children>
<padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding>
</HBox>
<HBox alignment="CENTER" spacing="30.0">
<children>
<Button mnemonicParsing="false" onAction="#addName" text="Add" />
<Button mnemonicParsing="false" onAction="#removeName" text="Remove" />
</children>
<padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding>
</HBox>
</VBox>
NameDisplayApp.java
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
import java.io.IOException;
public class NameDisplayApp extends Application {
@Override
public void start(Stage stage) throws IOException {
Person person = new Person(
"Bruce",
new String[] { "Simon", "Larry" },
"Banner"
);
FXMLLoader loader = new FXMLLoader(
getClass().getResource(
"name-display.fxml"
)
);
loader.getNamespace().put(
"person",
person
);
Pane pane = loader.load();
NameDisplayController controller = loader.getController();
controller.setPerson(person);
stage.setScene(new Scene(pane));
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
NameDisplayController.java
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
public class NameDisplayController {
private Person person;
private ObservableList<String> sampleNames = FXCollections.observableArrayList(
"George", "Henry", "Wallace"
);
public void setPerson(Person person) {
this.person = person;
}
public void addName(ActionEvent actionEvent) {
if (!sampleNames.isEmpty()) {
person.getMiddleNames().add(
sampleNames.remove(0)
);
}
}
public void removeName(ActionEvent actionEvent) {
if (!person.getMiddleNames().isEmpty()) {
sampleNames.add(
person.getMiddleNames().remove(0)
);
}
}
}
Person.java
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
public class Person {
public StringProperty firstName;
public StringProperty lastName;
private ObservableList<String> middleNames;
public Person(String firstName, String[] middleNames, String lastName) {
this.firstName = new SimpleStringProperty(firstName);
this.middleNames = FXCollections.observableArrayList(middleNames);
this.lastName = new SimpleStringProperty(lastName);
}
public String getFirstName() {
return firstName.get();
}
public StringProperty firstNameProperty() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName.set(firstName);
}
public ObservableList<String> getMiddleNames() {
return middleNames;
}
public String getLastName() {
return lastName.get();
}
public StringProperty lastNameProperty() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName.set(lastName);
}
}
Alternatywne Implementacje
mogą istnieć inne (być może bardziej korzystne sposoby) w ten sposób - na przykład przez powiązanie wiązań elementów w kodzie zamiast FXML (co zwykle robię) lub wstrzyknięcie modelu za pomocą systemu wstrzykiwania zależności. Zobacz afterburner.fx dla przykładu metody iniekcji - choć nie wiem, czy dopalacz również umieszcza obiekty modelu w przestrzeni nazw FXML lub po prostu wtryskuje się do kontrolera (jeśli nie wykonuje iniekcji w przestrzeni nazw FXML, która może być cool dodatek możesz poprosić o to).
Co to jest niestandardowy szablon? – jewelsea
Przedłużam moje pytanie, aby dokładniej wyjaśnić konfigurację. Zasadniczo polega to na tym, że dla każdej pozycji w kolekcji stosowany jest szablon.Tak więc dla każdej pozycji w kolekcji PersonCollection generowany jest horyzontalny panel stackpanel, imię, etykieta lastname i inny widok listy z szablonem. – kadir
Gdzie i jak określasz dane wejściowe (np. John Ivy, Robert Downey Junior itp.)? Czy to jest statyczne i nigdy nie zmienia się ani nie zmienia dynamicznych danych, które zmieniają się w czasie wykonywania? Czy na pewno naprawdę chcesz [ListView] (http://docs.oracle.com/javase/8/javafx/user-interface-tutorial/list-view.htm#CEGGEDBF) tutaj (bo to byłoby dziwne) lub czy to coś zupełnie innego niż ListView JavaFX? (Nie mam żadnej znajomości z xaml). – jewelsea