0
我正在創建問卷並希望有多個「頁面」。每個頁面都是一個窗格。我想創建一個「下一個按鈕」,將用戶導航到下一個窗格,在這個窗格中,另一個問題列表將等待他們回答。我在javafx的事件處理程序中寫什麼?通過創建一個新窗格,我的答案是否仍然安全?如何在事件處理程序中創建新窗格?
我正在創建問卷並希望有多個「頁面」。每個頁面都是一個窗格。我想創建一個「下一個按鈕」,將用戶導航到下一個窗格,在這個窗格中,另一個問題列表將等待他們回答。我在javafx的事件處理程序中寫什麼?通過創建一個新窗格,我的答案是否仍然安全?如何在事件處理程序中創建新窗格?
我給你舉個例子。我已將以下內容聲明爲全局變量:questions, answers, currentQuestion
。 Questions
是包含問題的字符串列表。 Answers
是包含用戶答案的字符串列表。 CurrentQuestion
是當前問題的索引。
當一個ButtonAction
(點擊)被調用時,我更新currentQuestion
(加1),所以它進入下一個問題。我已將Stage
作爲變量傳入,因此當點擊按鈕時我可以更新它。
它的功能是調用Scene
的新構造函數。然後,我在Stage
上使用setScene
來更新圖片。另一種方法是使用State Machine
。製作一個改變Pane
的課程。然後,Button Action
將改變類的狀態(例如,其將具有整數狀態的1,2,3(3個不同的問題)。
public class JavaFXApplication4 extends Application {
int curPage = 1;
String [] questionnaire = new String[]{
"Why is the sun blue?", "Why is iPhones better than Androids", "Why are moons bad for your skin",
"Who am I?", "To be or not to be?", "Yes or no?", "Will you rain on my parade?", "Etc questions"
};
String [] answer;
Scene s;
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stage) {
answer = new String[questionnaire.length];
Pane curPane = differentPage(questionnaire[curPage-1], questionnaire.length, stage);
s = new Scene(curPane);
stage.setScene(s);
stage.show();
}
public void setSceneAgain(Stage stage){
Pane curPane = differentPage(questionnaire[curPage-1], questionnaire.length, stage);
s = new Scene(curPane);
stage.setScene(s);
}
public Pane differentPage(String question, int numQuestions, final Stage stage){
Pane p = new Pane();
VBox vbo = new VBox();
Label l = new Label("Page: " + curPage);
Label r = new Label(question);
vbo.getChildren().addAll(l,r);
// 10 = lastpage
if(curPage < numQuestions){
Button nextButton = new Button("Next");
nextButton.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent e) {
// set answer[curPage-1] here to whatever the person chose
curPage++;
setSceneAgain(stage);
}
});
vbo.getChildren().add(nextButton);
} else {
Button finishButton = new Button("Finish");
finishButton.setOnAction(new EventHandler<ActionEvent>(){
@Override
public void handle(ActionEvent e){
//finish event
}
});
vbo.getChildren().add(finishButton);
}
p.getChildren().add(vbo);
return p;
}
}