From aa261bf9490582033bef55afec92673ea36d87cd Mon Sep 17 00:00:00 2001 From: sowgro Date: Thu, 18 Jul 2024 03:42:34 -0400 Subject: New json api wrapper, refactor of non-gui classes. --- .../net/sowgro/npehero/gui/LeaderboardView.java | 73 ++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100755 src/main/java/net/sowgro/npehero/gui/LeaderboardView.java (limited to 'src/main/java/net/sowgro/npehero/gui/LeaderboardView.java') diff --git a/src/main/java/net/sowgro/npehero/gui/LeaderboardView.java b/src/main/java/net/sowgro/npehero/gui/LeaderboardView.java new file mode 100755 index 0000000..4741823 --- /dev/null +++ b/src/main/java/net/sowgro/npehero/gui/LeaderboardView.java @@ -0,0 +1,73 @@ +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.main.Difficulty; +import net.sowgro.npehero.main.LeaderboardEntry; +import net.sowgro.npehero.main.Level; +import net.sowgro.npehero.main.Sound; + +public class LeaderboardView extends Pane +{ + /* + * this class is a layout class, most of its purpose is to place UI elements like Buttons within Panes like VBoxes. + * the creation of these UI elements are mostly not commented due to their repetitive and self explanatory nature. + * style classes are defined in the style.css file. + */ + public LeaderboardView(Level level, Difficulty diff, Pane prev) + { + //sets up table view: requires java bean getters, setters and constructors to work + TableView scores = new TableView(); + + TableColumn nameCol = new TableColumn("Name"); + TableColumn scoreCol = new TableColumn("Score"); + TableColumn dateCol = new TableColumn("Date"); + + scores.getColumns().add(nameCol); + scores.getColumns().add(scoreCol); + scores.getColumns().add(dateCol); + + nameCol.setCellValueFactory(data -> new ReadOnlyStringWrapper(data.getValue().getName())); + scoreCol.setCellValueFactory(data -> new ReadOnlyStringWrapper(data.getValue().getScore() + "")); + dateCol.setCellValueFactory(data -> new ReadOnlyStringWrapper(data.getValue().getDate())); + + scores.setItems(diff.leaderboard.entries); + + scores.getStyleClass().add("unselectable"); + + scores.prefWidthProperty().bind(super.prefWidthProperty().multiply(0.25)); + scores.prefHeightProperty().bind(super.prefHeightProperty().multiply(0.75)); + + scoreCol.setSortType(SortType.DESCENDING); + scores.getSortOrder().add(scoreCol); + + Button exit = new Button(); + exit.setText("Back"); + exit.setOnAction(e -> { + Sound.playSfx(Sound.BACKWARD); + Driver.setMenu(prev); + }); + + VBox centerBox = new VBox(); + centerBox.setAlignment(Pos.CENTER); + centerBox.setSpacing(10); + centerBox.getChildren().addAll(scores,exit); + centerBox.setMinWidth(400); + + HBox rootBox = new HBox(); + rootBox.prefWidthProperty().bind(super.prefWidthProperty()); + rootBox.prefHeightProperty().bind(super.prefHeightProperty()); + rootBox.getChildren().add(centerBox); + rootBox.setAlignment(Pos.CENTER); + + super.getChildren().add(rootBox); + } +} -- cgit v1.2.3