package net.sowgro.npehero.gui; import javafx.beans.property.ReadOnlyStringWrapper; import javafx.geometry.Pos; import javafx.scene.control.Button; import javafx.scene.control.TableColumn; import javafx.scene.control.TableView; import javafx.scene.control.TableColumn.SortType; import javafx.scene.layout.HBox; import javafx.scene.layout.Pane; import javafx.scene.layout.VBox; import net.sowgro.npehero.Driver; import net.sowgro.npehero.levelapi.Difficulty; import net.sowgro.npehero.levelapi.LeaderboardEntry; import net.sowgro.npehero.main.*; public class LeaderboardView extends Page { private final HBox content = new HBox(); public LeaderboardView(Difficulty diff, Page prev) { TableView scores = new TableView<>(); TableColumn nameCol = new TableColumn<>("Name"); TableColumn scoreCol = new TableColumn<>("Score"); TableColumn dateCol = new TableColumn<>("Date"); nameCol.prefWidthProperty().bind(scores.widthProperty().multiply(0.45)); scoreCol.prefWidthProperty().bind(scores.widthProperty().multiply(0.23)); dateCol.prefWidthProperty().bind(scores.widthProperty().multiply(0.27)); scores.getColumns().add(nameCol); scores.getColumns().add(scoreCol); scores.getColumns().add(dateCol); nameCol.setCellValueFactory(data -> new ReadOnlyStringWrapper(data.getValue().name)); scoreCol.setCellValueFactory(data -> new ReadOnlyStringWrapper(data.getValue().score + "")); dateCol.setCellValueFactory(data -> new ReadOnlyStringWrapper(data.getValue().date)); scores.setItems(diff.leaderboard.entries); scores.getStyleClass().add("unselectable"); scores.maxWidthProperty().bind(content.widthProperty().multiply(0.95)); scores.setPrefWidth(600); scores.prefHeightProperty().bind(content.heightProperty().multiply(0.75)); scoreCol.setSortType(SortType.ASCENDING); scores.getSortOrder().add(scoreCol); Button exit = new Button(); exit.setText("Back"); exit.setOnAction(_ -> { Sound.playSfx(Sound.BACKWARD); Driver.setMenu(prev); }); VBox centerBox = new VBox(); centerBox.getChildren().addAll(scores, exit); centerBox.setSpacing(10); centerBox.setAlignment(Pos.CENTER); content.getChildren().add(centerBox); content.setAlignment(Pos.CENTER); } @Override public Pane getContent() { return content; } }