Вы можете использовать пользовательский компонент FXML-шаблон (см. Также этот вопрос ).
По сути, вы можете сделать
<?xml ... ?>
<?import javafx.scene.layout.HBox ?>
<?import javafx.scene.control.Label ?>
<fx:root type="HBox">
<Label fx:id="exerciseLabel"/>
<Label fx:id="mainMuscleLabel"/>
<Label fx:id="equipmentLabel"/>
</fx:root>
и затем определите класс контроллера / компонента:
public class ExerciseView extends HBox {
@FXML
private Label exerciseLabel ;
@FXML
private Label mainMuscleLabel ;
@FXML
private Label equipmentLabel ;
public ExerciseView(Resource exercise, Resource mainMuscle, Literal equipment) {
FXMLLoader loader = new FXMLLoader(getClass().getResource("Exercise.fxml"));
loader.setController(this);
loader.setRoot(this);
try {
loader.load();
mainMuscleLabel.setText(mainMuscle.getLocalName());
equipmentLabel.setText(equipment.getString());
exerciseLabel.setText(exercise.getLocalName());
} catch (IOException exc) {
throw new RuntimeException(exc);
}
}
// ...
}
И затем, конечно:
ResultSet result = Querying.ontologyQuery(Strings.getFeatured());
while (result.hasNext()) {
QuerySolution qs = result.next();
Resource exercise = qs.getResource("Exercise");
Resource mainMuscle = qs.getResource("mainMuscle");
Literal equipment = qs.getLiteral("Equipment");
vbox.getChildren().add(new ExerciseView(exercise, mainMuscle, equipment));
}
(или некоторую простую модификацию этого, если вы не хотите, чтобы код вашей базы данныхзнать о вашем интерфейсе ...).