Clase HighScore (Aplicación)

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;

public class HighScore extends Application {

    @Override
    public void start(Stage primaryStage) {

        GridPane gridPane = new GridPane();
        Scene scene = new Scene(gridPane, 300, 250);
        Label labelName = new Label("Nombre:");
        TextField textFieldName = new TextField();
        Label labelPoints = new Label("Puntuación:");
        TextField textFieldPoints = new TextField();
        TextArea textAreaResults = new TextArea();
        Button btn = new Button("Guardar");
        Label labelPosition = new Label("Posición:");
        TextField textFieldPosition = new TextField();

        textAreaResults.setEditable(false);
        textFieldPosition.setEditable(false);
        gridPane.setHgap(10);
        gridPane.setVgap(10);
        gridPane.setPadding(new Insets(10));
        gridPane.add(labelName, 0, 0);
        gridPane.add(textFieldName, 1, 0);
        gridPane.add(labelPoints, 0, 1);
        gridPane.add(textFieldPoints, 1, 1);
        gridPane.add(btn, 1, 2);
        gridPane.add(labelPosition, 0, 3);
        gridPane.add(textFieldPosition, 1, 3);
        gridPane.add(textAreaResults, 0, 4, 2, 1);

        primaryStage.setTitle("High Scores");
        primaryStage.setScene(scene);
        primaryStage.show();

        // Creación de objetos para almacenar máximas puntuaciones
        Scores scores = new Scores();
        ScoresFile scoresFile = new ScoresFile();
        // Cargar la lista inicial de máximas puntuaciones
        scoresFile.load(scores);
        // Mostrar la lista inicial de máximas puntuaciones
        textAreaResults.setText(scores.toString());

        btn.setOnAction((ActionEvent event) -> {
            // Recoger datos de nueva puntuación desde la ventana
            String playerName = textFieldName.getText();
            int value = Integer.valueOf(textFieldPoints.getText());
            // Crear una nueva puntuación
            Score score = new Score(playerName, value);
            // Añadirla a la lista de puntuaciones
            scores.addScore(score);
            // Mostrar la posición correspondiente a la puntuación en la lista 
            //  o -1 si no está entre los primeros
            textFieldPosition.setText(String.valueOf(scores.getPosition(score) + 1));
            // Mostrar la lista de máximas puntuaciones
            textAreaResults.setText(scores.toString());
            // Almacenar la lista de máximas puntuaciones
            scoresFile.save(scores);
        });

    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }

}

Clase ScoresFile (Almacenamiento en fichero)

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

public class ScoresFile {

    private final File highScoreFile;

    public ScoresFile() {
        highScoreFile = new File("highscores.dat");
    }

    public void load(Scores scores) {
        FileInputStream fis = null;
        try {
            fis = new FileInputStream(highScoreFile);
            ObjectInputStream ois = new ObjectInputStream(fis);
            scores.setScoresList((ArrayList<Score>)ois.readObject());
        } catch (FileNotFoundException ex) {
            // No existe el fichero. Se creará posteriormente al guardar
        } catch (IOException | ClassNotFoundException ex) {
            Logger.getLogger(ScoresFile.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            try {
                if(fis != null) {
                   fis.close();
                }
            } catch (IOException ex) {
                Logger.getLogger(ScoresFile.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

    public void save(Scores scores) {
        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream(highScoreFile);
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            oos.writeObject((ArrayList<Score>)scores.getScoresList());
            oos.close();
        } catch (IOException ex) {
            Logger.getLogger(ScoresFile.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            try {
                if(fos != null) {
                   fos.close();
                }
            } catch (IOException ex) {
                Logger.getLogger(ScoresFile.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
}

Clase Scores (Lista de puntuaciones)

import java.util.ArrayList;
import java.util.Collections;

public class Scores  {

    public static final int MAX_SCORES = 5;
    private ArrayList<Score> scoresList = new ArrayList();

    public ArrayList<Score> getScoresList() {
        return scoresList;
    }

    public void setScoresList(ArrayList<Score> scoresList) {
        this.scoresList = scoresList;
    }

    public void addScore(Score score) {
        scoresList.add(score);
        Collections.sort(scoresList);
        if(scoresList.size() > MAX_SCORES) {
            scoresList.remove(scoresList.size() - 1);
        }
    }

    public int getPosition(Score score) {
        return scoresList.indexOf(score);
    }
    
    @Override
    public String toString() {
        String result = "";
        for(int i=0; i<scoresList.size(); i++) {
            Score score = scoresList.get(i);
            result += (i+1) + "º: " + score.getName() + ": " + score.getPoints() + "\n";
        }
        return result;
    }
       
}

Clase Score (Una puntuación)

import java.io.Serializable;

public class Score implements Comparable<Score>, Serializable {

    private String name;
    private int points;

    public Score(String name, int score) {
        this.name = name;
        this.points = score;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getPoints() {
        return points;
    }

    public void setPoints(int points) {
        this.points = points;
    }

    @Override
    public int compareTo(Score o) {
        if (this.points < o.points) {
            return 1;
        } else if (this.points > o.points) {
            return -1;
        } else {
            return 0;
        }
    }
        
}