private GridPane buildRecordingGrid(Recording recording) { GridPane grid = new GridPane(); grid.setHgap(5); grid.setVgap(5); Label status = new Label(); status.setAlignment(Pos.CENTER); status.setMinWidth(STATUS_MIN_WIDTH); updateStatusIcon(recording, status); recording .fileExistsActionProperty() .addListener(observable -> updateStatusIcon(recording, status)); Label title = new Label(); title.setMinWidth(TITLE_MIN_WIDTH); title.textProperty().bind(recording.fullTitleProperty()); Label destination = new Label(); destination.getStyleClass().add("destination"); destination.textProperty().bind(recording.destinationProperty().asString()); LocalDate dateArchived = recording.getDateArchived(); if (dateArchived != null) { String dateArchivedText = String.format("Archived %s", DateUtils.formatArchivedOnDate(dateArchived)); Tooltip tooltip = new Tooltip(dateArchivedText); title.setTooltip(tooltip); destination.setTooltip(tooltip); } ReplaceOrRenameActionBar actionBar = new ReplaceOrRenameActionBar(recording, userPrefs); actionBar.setMinWidth(ACTION_BAR_MIN_WIDTH); GridPane.setHalignment(actionBar, HPos.RIGHT); GridPane.setHgrow(actionBar, Priority.ALWAYS); GridPane.setMargin(actionBar, new Insets(0, 0, 0, 10)); grid.add(status, 0, 0, 1, 2); grid.add(title, 1, 0); grid.add(destination, 1, 1); grid.add(actionBar, 2, 0, 1, 2); return grid; }