Отображение плиткой файлов из сервера на JavaFX

Всем привет. У меня такая проблема, что мне нужно написать клиент, который будет отправлять файлы на сервер, а потом отображать их в клиентском окне. Насчет listview понятно, но хотелось бы сделать все более красиво. Например, создать плитку с картинками (например картинка знака мелодии для файлов, расширение которых mp3 и т.д). Буду очень благодарен за подсказку в том, как реализовать отображение файлов в виде плитки


Ответы (1 шт):

Автор решения: siarhei987

Для отображения в виде плитки можно использовать TilePane или FlowPane. Для Label можно задать изображение и поместить его, например, слева или справа от текста.

Пример с использованием TilePane.

public class TileApp extends Application {

    private final List<Image> cachedImages = new ArrayList<>();

    @Override
    public void start(Stage primaryStage) throws Exception {

        var tiles = new TilePane(12, 12);
        tiles.setAlignment(Pos.CENTER);
        var scroll = new ScrollPane(tiles);
        scroll.setFitToWidth(true);
        scroll.setFitToHeight(true);

        var files = Stream.generate(this::getLabel)
                .limit(100)
                .toList();

        tiles.getChildren().addAll(files);
        primaryStage.setScene(new Scene(scroll, 600, 400));
        primaryStage.show();
    }

    private Label getLabel() {

        var index = (int) (Math.random() * cachedImages.size());
        var fileName = "file" + (int) (Math.random() * 100);
        var label = new Label(fileName, new ImageView(cachedImages.get(index)));
        label.setMaxWidth(120);
        label.setContentDisplay(ContentDisplay.TOP);

        return label;
    }

    @Override
    public void init() throws Exception {
        try (var paths = Files.newDirectoryStream(Path.of("images"))) {
            paths.forEach(path -> {
                var uri = path.toUri().toString();
                cachedImages.add(
                        new Image(uri, 64, 64, true, true)
                );
            });
        }
    }
}
→ Ссылка