Я пытаюсь создать сцену в 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);
}
}
}