У меня есть небольшая игра-викторина, которую я делаю, однако, когда я пытаюсь передать значение от одного из моих контроллеров к другому, ответ всегда противоположен тому, что я ожидаю.Обычно выбирается переключатель, и если выбран правильный, метод returnValue()
должен возвращать 1, иначе 0. Это говорит мне, выбрал ли пользователь правильный ответ или нет.Код для контроллера 1:
public class Question1
{
@FXML
private Label question1Lbl;
@FXML
private RadioButton rb1;
@FXML
private RadioButton rb2;
@FXML
private RadioButton rb3;
private static int score;
public void nextQuestion(ActionEvent actionEvent)
{
try
{
FXMLLoader loader = new FXMLLoader(getClass().getResource("../gui/Question2.fxml"));
Parent rootPane = loader.load();
Stage primaryStage = new Stage();
primaryStage.setScene(new Scene(rootPane));
primaryStage.setResizable(false);
primaryStage.setTitle("Frage 2");
primaryStage.show();
rb1.getScene().getWindow().hide();
}
catch (Exception e)
{
System.out.println("Error loading question 1" + e.toString());
e.printStackTrace();
}
}
//returns the points for this question. 1 for correct, 0 for incorrect
public int returnValue()
{
if (!rb2.isSelected())
{
score = 0;
return score;
}
score = 1;
return score;
}
}
Предполагается, что класс FinishScreen
подсчитывает баллы, полученные по всем методам returnValue()
, и отображает счет, но, независимо от того, что я пытаюсь, Question1
класс всегда возвращает 0 независимо от того, была выбрана радиокнопка или нет!Я уже писал такой код, и он работал отлично, поэтому я очень запутался.У меня есть еще 4 класса, как это тоже.В любом случае, вот класс FinishScreen
:
public class FinishScreen implements Initializable
{
@FXML
private Label resultLbl;
private int totalScore;
public void calculateScore() throws Exception
{
FXMLLoader loader1 = new FXMLLoader(getClass().getResource("../gui/Question1.fxml"));
Parent root1 = loader1.load();
Question1 q1 = loader1.getController();
totalScore = q1.returnValue();
System.out.println(totalScore);
resultLbl.setText("Score: " + totalScore);
}
@Override
public void initialize(URL location, ResourceBundle resources)
{
try
{
calculateScore();
}
catch (Exception e)
{
System.out.println("Error in results " + e.toString());
}
}
}
Я использовал информацию из этого поста в качестве справки о том, как передавать значения из одного контроллера в другой: FXMLLoader getController возвращает NULL?
Если в том, как я пытаюсь получить значение из моего Question1
класса, возникает ошибка, которая имеет смысл, но большинство других постов, которые я прочитал, похоже, следуют этому шаблону разработки.Это глупая проблема, но я все равно не могу ее понять.
Мой returnValue()
должен возвращать 1, когда rb2.isSelected() == true
, но это не так.Я также пытался сделать статическую переменную-член score
, но это не помогло.Любые идеи или предложения относительно того, что может быть проблемой здесь?Заранее спасибо.