Мне кажется, я понимаю, почему вы получаете значения по умолчанию на вашем слайдере все время, когда вы открываете новое окно или, скорее, загружаете новое окно.
Если вы посмотрите на приведенный ниже код, мы увидим, что вы создаете нового родителя, загружая ваш FXML с именем, которое задается в качестве аргумента, после чего вы устанавливаете новую сцену на свою сцену. Из этого следует отметить, что вы создаете a нового родителя и сцену, которая не имеет представления о каких-либо значениях, которые устанавливают ваши ползунки в других сценах.
static void launchScreen(String fileName) {
fileName = "/screens/" + fileName + ".fxml";
try {
Parent root =
FXMLLoader.load(MainMenuController.class.getResource(fileName));
Scene scene = new Scene(root);
stage.setTitle("Fortress Combat");
stage.setScene(scene);
stage.show();
stage.setOnCloseRequest(t -> {
Platform.exit();
System.exit(420);
});
} catch (IOException e) {
e.printStackTrace();
}
}
Несколько предложений:
- Сохраните реальную сцену, а затем, если аргумент имени файла соответствует уже созданной сцене, тогда вы действительно можете «переключить» сцену вместо создания новой.
Ниже приведен быстро сделанный пример с жестко закодированным оператором if, который просто показывает вам, что я имею в виду, но я уверен, что вы могли бы решить его лучше, чем при меньшем дублировании кода.
private Scene sceneA;
static void launchScreen(String fileName) {
if(fileName.equals("sceneA") && sceneA != null){
/*if we want to open up sceneA and it has been created before (meaning it's not null) then open the already existing scene.*/
stage.setTitle("Fortress Combat");
stage.setScene(sceneA);
stage.show();
stage.setOnCloseRequest(t -> {
Platform.exit();
System.exit(420);
});
}else{
fileName = "/screens/" + fileName + ".fxml";
try {
Parent root =
FXMLLoader.load(MainMenuController.class.getResource(fileName));
Scene scene = new Scene(root);
stage.setTitle("Fortress Combat");
stage.setScene(scene);
stage.show();
stage.setOnCloseRequest(t -> {
Platform.exit();
System.exit(420);
});
} catch (IOException e) {
e.printStackTrace();
}
}
}
- Предложение 2 - хранить их где-нибудь, может быть, в каком-то классе обработчиков или в файле, если вы хотите, чтобы они были постоянными.
- или предложение 3, которое может заключаться в объявлении некоторых статических переменных в вашем контроллере, которые вы устанавливаете в значения ваших ползунков, когда значения ползунков изменились. Затем вы можете установить значения ползунка в вашем методе initialize, используя ваши статические переменные.
В любом случае, это были мои мысли, и я надеюсь, что смогу чем-нибудь помочь.
Дайте нам знать, как это работает:)