Невозможно переключаться между 3 различными фонами, используя Button в JavaFx для проекта разработки игр - PullRequest
0 голосов
/ 10 июня 2019

Я пытаюсь создать сцену в JavaFX для моих высоких баллов, которая имеет 3 различных метода, которые переключаются между баллами для уровней 1, 2 и 3. При выполнении этого кода метки (которые отображают баллы) перекрываются,и кнопки для переключения между каждым дисплеем не работают.Когда я запускаю код, он переключается между выходом для Уровня 1 и Уровня 2, но затем не может вернуться и застревает между переключением на выход для отображения высоких результатов для Уровня 2 и 3.

package sample;

import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.layout.*;
import javafx.scene.text.Font;
import sun.plugin.javascript.navig.Anchor;

import javafx.scene.control.Label;
import java.io.*;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Scanner;

public class HighScores {

    private ArrayList<String> levelOneNames = new ArrayList<>(0);
    private ArrayList<Integer> levelOneScores = new ArrayList<>(0);
    private ArrayList<String> levelTwoNames = new ArrayList<>(0);
    private ArrayList<Integer> levelTwoScores = new ArrayList<>(0);
    private ArrayList<String> levelThreeNames = new ArrayList<>(0);
    private ArrayList<Integer> levelThreeScores = new ArrayList<>(0);
    private AnchorPane layout;
    private String currentLevel = "1";
    private Label userName1, userScore1, userName2, userScore2, userName3, userScore3;

    private ArrowButton next, back;

    public Scene mainWindow ()
    {
        layout = new AnchorPane();
        readUserScores();
        sortList();


        next = new ArrowButton("right");
        next.setLayoutX(835);
        next.setLayoutY(350);
        layout.getChildren().add(next);

        back = new ArrowButton("left");
        back.setLayoutX(-35);
        back.setLayoutY(350);
        layout.getChildren().add(back);

        if (currentLevel.equals("1"))
        {
            next.setOnAction(event -> displayLevelTwoScores());
        }
        else if (currentLevel.equals("2")){
            next.setOnAction(event ->  displayLevelThreeScores());
            back.setOnAction(event -> displayLevelOneScores());
        }
        else
        {
            back.setOnAction(event -> displayLevelTwoScores());
        }

        displayLevelOneScores();

        return new Scene(layout, 1000, 750);
    }

    public void readUserScores()
    {
        try {
            Scanner in = new Scanner(new File("userscore_level1.txt"));
            while (in.hasNextLine()) {
                String line = in.nextLine();
                levelOneNames.add(line.substring(0, line.indexOf(' ')));
                levelOneScores.add(Integer.parseInt(line.substring(line.indexOf(' ')+1)));
               // arr.add(new Record(line.substring(0, line.indexOf(' ')), Integer.parseInt(line.substring(line.indexOf(' ') + 1))));
            }
        } catch (IOException e) {
        }

        try {
            Scanner in = new Scanner(new File("userscore_level2.txt"));
            while (in.hasNextLine()) {
                String line = in.nextLine();
                levelTwoNames.add(line.substring(0, line.indexOf(' ')));
                levelTwoScores.add(Integer.parseInt(line.substring(line.indexOf(' ')+1)));
                // arr.add(new Record(line.substring(0, line.indexOf(' ')), Integer.parseInt(line.substring(line.indexOf(' ') + 1))));
            }
        } catch (IOException e) {
        }

        try {
            Scanner in = new Scanner(new File("userscore_level3.txt"));
            while (in.hasNextLine()) {
                String line = in.nextLine();
                levelThreeNames.add(line.substring(0, line.indexOf(' ')));
                levelThreeScores.add(Integer.parseInt(line.substring(line.indexOf(' ')+1)));
                // arr.add(new Record(line.substring(0, line.indexOf(' ')), Integer.parseInt(line.substring(line.indexOf(' ') + 1))));
            }
        } catch (IOException e) {
        }
    }

    /**
     * Clears all the scores and names from the files.
     *
     * @since 1
     */
    public static void clearRecords() {
        try {
            PrintWriter out = new PrintWriter(new FileWriter("userscore_level1.txt"));
            out.close();
        } catch (IOException e) {
        }

        try {
            PrintWriter out = new PrintWriter(new FileWriter("userscore_level2.txt"));
            out.close();
        } catch (IOException e) {
        }

        try {
            PrintWriter out = new PrintWriter(new FileWriter("userscore_level2.txt"));
            out.close();
        } catch (IOException e) {
        }
    }

    public void sortList () {
        for (int x = 0; x<levelOneScores.size(); x++) {
            int temp = levelOneScores.get(x), pos = x;
            String tempName = levelOneNames.get(x);

            while (pos >0 && temp> levelOneScores.get(pos -1))
            {
                levelOneScores.set(pos, levelOneScores.get(pos -1));
                levelOneNames.set(pos, levelOneNames.get(pos -1));
                pos--;
            }
            levelOneScores.set(pos, temp);
            levelOneNames.set(pos, tempName);
        }

        for (int x = 0; x<levelTwoScores.size(); x++) {
            int temp = levelTwoScores.get(x), pos = x;
            String tempName = levelTwoNames.get(x);

            while (pos >0 && temp> levelTwoScores.get(pos -1))
            {
                levelTwoScores.set(pos, levelTwoScores.get(pos -1));
                levelTwoNames.set(pos, levelTwoNames.get(pos -1));
                pos--;
            }
            levelTwoScores.set(pos, temp);
            levelTwoNames.set(pos, tempName);
        }

        for (int x = 0; x<levelThreeScores.size(); x++) {
            int temp = levelThreeScores.get(x), pos = x;
            String tempName = levelThreeNames.get(x);

            while (pos >0 && temp> levelThreeScores.get(pos -1))
            {
                levelThreeScores.set(pos, levelThreeScores.get(pos -1));
                levelThreeNames.set(pos, levelThreeNames.get(pos -1));
                pos--;
            }
            levelThreeScores.set(pos, temp);
            levelThreeNames.set(pos, tempName);
        }

    }

    public void displayLevelOneScores()
    {
        layout.getChildren().removeAll(userScore2, userName2, userScore3, userName3);
        currentLevel = "1";
        int numOutput;
        BackgroundImage levelOne = new BackgroundImage(new Image("/Backgrounds/highscores_level1.png", 1000,
                750, false, true), BackgroundRepeat.REPEAT, BackgroundRepeat.NO_REPEAT, BackgroundPosition.DEFAULT,
                BackgroundSize.DEFAULT);

        layout.setBackground(new Background(levelOne));

        if (levelOneScores.size()<=10)
            numOutput = levelOneScores.size();
        else
            numOutput = 10;

        for (int i = 0; i<numOutput; i++)
        {
            userName1 = new Label(levelOneNames.get(i));
            userName1.setLayoutX(130);
            userName1.setLayoutY(200 + i * 40);
            userName1.setFont(Font.font("Helvetica", 24));
            layout.getChildren().add(userName1);

            userScore1 = new Label(String.valueOf(levelOneScores.get(i)));
            userScore1.setLayoutX(700);
            userScore1.setLayoutY(200 + i * 40);
            userScore1.setFont(Font.font("Helvetica", 24));
            layout.getChildren().add(userScore1);

        }

    }

    public void displayLevelTwoScores()
    {
        layout.getChildren().removeAll(userName1, userScore1, userScore3, userName3);
        currentLevel = "2";
        int numOutput;
        BackgroundImage levelTwo = new BackgroundImage(new Image("/Backgrounds/highscores_level2.png", 1000,
                750, false, true), BackgroundRepeat.REPEAT, BackgroundRepeat.NO_REPEAT, BackgroundPosition.DEFAULT,
                BackgroundSize.DEFAULT);

        layout.setBackground(new Background(levelTwo));

        if (levelTwoScores.size()<=10)
            numOutput = levelTwoScores.size();
        else
            numOutput = 10;

        for (int i = 0; i<numOutput; i++)
        {
            userName2 = new Label(levelTwoNames.get(i));
            userName2.setLayoutX(130);
            userName2.setLayoutY(200 + i * 40);
            userName2.setFont(Font.font("Helvetica", 24));
            layout.getChildren().add(userName2);

            userScore2 = new Label(String.valueOf(levelTwoScores.get(i)));
            userScore2.setLayoutX(700);
            userScore2.setLayoutY(200 + i * 40);
            userScore2.setFont(Font.font("Helvetica", 24));
            layout.getChildren().add(userScore2);

        }

    }

    public void displayLevelThreeScores()
    {
        layout.getChildren().removeAll(userScore2, userName2, userName1, userScore1);
        currentLevel = "3";
        int numOutput;
        BackgroundImage levelThree = new BackgroundImage(new Image("/Backgrounds/highscores_level3.png", 1000,
                750, false, true), BackgroundRepeat.REPEAT, BackgroundRepeat.NO_REPEAT, BackgroundPosition.DEFAULT,
                BackgroundSize.DEFAULT);

        layout.setBackground(new Background(levelThree));

        if (levelThreeScores.size()<=10)
            numOutput = levelThreeScores.size();
        else
            numOutput = 10;

        for (int i = 0; i<numOutput; i++)
        {
            userName3 = new Label(levelThreeNames.get(i));
            userName3.setLayoutX(130);
            userName3.setLayoutY(200 + i * 40);
            userName3.setFont(Font.font("Helvetica", 24));
            layout.getChildren().add(userName3);

            userScore3 = new Label(String.valueOf(levelThreeScores.get(i)));
            userScore3.setLayoutX(700);
            userScore3.setLayoutY(200 + i * 40);
            userScore3.setFont(Font.font("Helvetica", 24));
            layout.getChildren().add(userScore3);

        }

    }



}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...