I am working on a school assignment in Java using JavaFX 15. It's a simple number guessing game, where a random number is generated and the player guesses the number. When the right number is guessed the player can begin a new round or end the game. When the game ends a window displaying some statistics is supposed to appear, showing the round number, the generated number, how many guesses it took, and how long it took. I store all these stats in Array Lists as the game plays out. I would like to display this information in a TableView-
- a column for the round number
- a column for the generated number
- a column for the number of guesses it took
- a column for the time it took
but when the program is run no information appears in the table.
I created a StatRow class that can be used to add the stats to an ObservableList.
public class StatRow 
{
   private SimpleIntegerProperty number, guesses, round, time;
   
   public StatRow (int round, int number, int guesses, int time)
   {
      this.number = new SimpleIntegerProperty(number);
      this.guesses = new SimpleIntegerProperty(guesses);
      this.round = new SimpleIntegerProperty(round);
      this.time = new SimpleIntegerProperty(time);
   }
    //set and get methods here
}
Here is the controller handling the table creation/population. The formatting is handled in an fxml file. The stage is handled in the main class.
public class EndController 
{
   @FXML
   TableView<StatRow> statsReadoutTable;
   @FXML
   TableColumn<StatRow, Integer> roundCol;
   @FXML
   TableColumn<StatRow, Integer> numberCol;
   @FXML
   TableColumn<StatRow, Integer> guessesCol;
   @FXML
   TableColumn<StatRow, Integer> timeCol;
   
   ArrayList<Integer> correctNumber = new ArrayList<>();
   ArrayList<Integer> guessesNumber = new ArrayList<>();
   ArrayList<Integer> roundCount = new ArrayList<>();
   ArrayList<Integer> roundTime = new ArrayList<>();
   
   //initalizes controller with stats arrays
   public void initEndData(ArrayList correct, ArrayList guesses, ArrayList round, ArrayList start)
   { 
      correctNumber = correct;
      guessesNumber = guesses;
      roundCount = round;
      roundTime = start;
   }
   
   //constructor sets table view content
   public EndController()
   {
      numberCol = new TableColumn<>();
      numberCol.setCellValueFactory(new PropertyValueFactory<>("number"));
      
      guessesCol = new TableColumn<>();
      guessesCol.setCellValueFactory(new PropertyValueFactory<>("guesses"));
      
      roundCol = new TableColumn<>();
      roundCol.setCellValueFactory(new PropertyValueFactory<>("round"));
      
      timeCol = new TableColumn<>();
      timeCol.setCellValueFactory(new PropertyValueFactory<>("time"));
      
      statsReadoutTable = new TableView<>();
      statsReadoutTable.setItems(getStats());
      statsReadoutTable.getColumns().addAll(roundCol, numberCol, guessesCol, timeCol);
   }
   
   //create stats observable list from arrays
   private ObservableList<StatRow> getStats()
   {
      ObservableList<StatRow> stats = FXCollections.observableArrayList();
      int i;
      for(i = 0; i < roundCount.size(); i++)
      {
          stats.add(new StatRow(roundCount.get(i),correctNumber.get(i), 
                  guessesNumber.get(i), roundTime.get(i)));   
      }
      return stats;
   }
}
I have tried creating the Observable List manually with predetermined data, just to see if my getStats() method was to blame, but it still came up blank.
