添加“重新开始”'按钮到我的Java测验

时间:2017-03-22 23:25:46

标签: java

我已经用许多其他类创建了这个应用程序,它似乎运行正常。但是,当我完成测验时,我无法添加按钮来重新启动测验?我试过Jbutton和Jframe,但我不知道怎么做?是否有一个简单的代码要添加?

包装样品;

import javafx.concurrent.Task;
import javafx.concurrent.WorkerStateEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;

import java.io.IOException;
import java.net.URL;
import java.util.*;

import javafx.event.ActionEvent;
import javafx.stage.Stage;

import javax.xml.bind.JAXBException;

public class Controller implements Initializable{

    static int count = 1;
    static int score=0;
    static  int multiplayerCounter = 1;
    static int scoreOfComputer = 0;
    static int scoreOfHuman = 0;
    static String level;
    static XmlToObject ob = new XmlToObject();
    static  List<String[]> questionsList = ob.readQuestionsAndAnswers("easy");
    static boolean isCheatSet;
    static boolean isSkipSet;
    static String username;


    public static String getLevel() {
        return level;
    }

    public static void setLevel(String level) {
        Controller.level = level;
    }


    @FXML
    public RadioButton rdEasy;

    @FXML
    public RadioButton rdHard;

    @FXML
    public TextField txtAnswer;

    @FXML
    private Label lblMessage;
    @FXML
    private TextField txtUsername;
    @FXML
    private PasswordField txtPassword;

    @FXML
    private ListView lstHistoryScore;

    @FXML
    private Button btnNext;

    @FXML
    private Button btnCheat;

    @FXML
    private Button btnSkip;

    @FXML
    private Button btnStart;

    @FXML
    private Label headerCaption;

    @FXML
    private Label quizCaption;

    @FXML
    public Label question;

    @FXML
    public RadioButton optionOne;

    @FXML
    public RadioButton optionTwo;



    @FXML
    public Button btnPass;

    @FXML
    public RadioButton rdSinglePlayer;

    @FXML
    public ToggleGroup answerGroup;


    @Override
    public void initialize(URL location, ResourceBundle resources) {

    }


    @FXML
    private void btnLoginAction(ActionEvent actionEvent) throws IOException {

        List<String[]> loginList = ob.readUserLogins();

        for(String[] s:loginList ){

            if(txtUsername.getText().equals(s[0]) && txtPassword.getText().equals(s[1])){
                lblMessage.setText("Success");
                ((Node) (actionEvent.getSource() )).getScene().getWindow().hide();
                Parent parent = FXMLLoader.load(getClass().getResource("/sample/Start.fxml"));
                username = txtUsername.getText();
                Stage stage = new Stage();
                Scene scene = new Scene(parent);
                stage.setScene(scene);
                stage.show();

            }else{
                lblMessage.setText("Invalid username or password");

            }
        }

    }

    public void btnNextAction(ActionEvent actionEvent) throws IOException, JAXBException {

        Stage stage = (Stage) ((Node)actionEvent.getSource()).getScene().getWindow();
         int index = count - 1;
         String[] criteria = questionsList.get(index);

         if(getLevel().equals("hard")){
             if (criteria[2].toLowerCase().equals(txtAnswer.getText().toLowerCase()) && !isCheatSet && !isSkipSet) {
                 score++;
             }

                if(count == 10) {
                    quizCaption.setText("Over");
                    question.setText("Your Score: " + score);
                    txtAnswer.setVisible(false);

                    btnNext.setVisible(false);
                    btnCheat.setVisible(false);
                    btnSkip.setVisible(false);
                    lstHistoryScore.setVisible(true);
                    lstHistoryScore.setItems(new XmlToObject().readXml());
                    ObjectToXML obx = new ObjectToXML();
                    obx.saveToXml(score);


                }else {
                    txtAnswer.setText("");
                    String[] cr = questionsList.get(count);
                    quizCaption.setText("Quiz " + (count + 1));
                    question.setText(cr[1]);

                    isCheatSet = false;
                    isSkipSet = false;
                    count++;
                }
            }else {
                RadioButton selectedRadio = (RadioButton) answerGroup.getSelectedToggle();
                optionOne.setSelected(false);
                optionTwo.setSelected(false);

                if(!isSkipSet) {
                    if (getAnswer(criteria[4], selectedRadio.getText()) && !isCheatSet) {
                        score++;
                    }
                }

             if(count == 10) {
                 quizCaption.setText("Over");
                 question.setText("Your Score: " + score);
                 optionOne.setVisible(false);
                 optionTwo.setVisible(false);
                 btnNext.setVisible(false);
                 btnCheat.setVisible(false);
                 btnSkip.setVisible(false);
                 lstHistoryScore.setVisible(true);
                 lstHistoryScore.setItems(new XmlToObject().readXml());
                 ObjectToXML obx = new ObjectToXML();
                 obx.saveToXml(score);


             }else {
                    String[] cr = questionsList.get(count);
                    quizCaption.setText("Quiz " + (count + 1));
                    question.setText(cr[1]);

                    optionOne.setText(cr[2]);
                    optionTwo.setText(cr[3]);

                    isCheatSet = false;
                    isSkipSet = false;
                    count++;
                }
            }


    }

    public void btnCheatAction(ActionEvent actionEvent) throws IOException, JAXBException {

        isCheatSet = true;

        int index = count -1;
        if(getLevel().equals("hard")){
            txtAnswer.setText(getCheatAnswerForHardLevel(index));

        }else {
            if(getCheatAnswer(index) == 1){
                optionOne.setSelected(true);
            }else {
                optionTwo.setSelected(true);
            }

        }


        Task<Void> sleeper = new Task<Void>() {
            @Override
            protected Void call() throws Exception {
                try {
                    Thread.sleep(300);
                } catch (InterruptedException e) {
                }
                return null;
            }
        };
        sleeper.setOnSucceeded(new EventHandler<WorkerStateEvent>() {
            @Override
            public void handle(WorkerStateEvent event) {
                try {
                    btnNextAction(actionEvent);
                } catch (IOException e) {
                    e.printStackTrace();
                } catch (JAXBException e) {
                    e.printStackTrace();
                }
            }
        });
        new Thread(sleeper).start();


    }

    public void btnSkipAction(ActionEvent actionEvent) throws IOException, JAXBException {

        isSkipSet = true;
        btnNextAction(actionEvent);
    }

    public void setName(String name) {
        quizCaption.setText(name);
    }

    public void btnStartAction(ActionEvent actionEvent) throws IOException, JAXBException {

        if(rdSinglePlayer.isSelected()){
            ((Node) (actionEvent.getSource())).getScene().getWindow().hide();

            if(rdHard.isSelected()) {
                final FXMLLoader loader = new FXMLLoader(getClass().getResource("/sample/SinglePlayerHardLevel.fxml"));

                questionsList = ob.readQuestionsAndAnswers("hard");
                String[] criteria = questionsList.get(0);

                setLevel("hard");
                loader.getNamespace().put("caption", ("Quiz"+ criteria[0]) );
                loader.getNamespace().put("quiz", criteria[1]);
                Parent root = loader.load();

                Stage stage = new Stage();
                Scene scene = new Scene(root);
                stage.setScene(scene);
                stage.show();
            }else {
                final FXMLLoader loader = new FXMLLoader(getClass().getResource("/sample/SinglePlayerEasyLevel.fxml"));

                String[] criteria = questionsList.get(0);

                loader.getNamespace().put("caption", ("Quiz" + criteria[0]));
                loader.getNamespace().put("quiz", criteria[1]);
                loader.getNamespace().put("one", criteria[2]);
                loader.getNamespace().put("two", criteria[3]);
                Parent root = loader.load();
                setLevel("easy");

                Stage stage = new Stage();
                Scene scene = new Scene(root);
                stage.setScene(scene);
                stage.show();
            }


        }else{
            ((Node) (actionEvent.getSource())).getScene().getWindow().hide();
            final FXMLLoader loader = new FXMLLoader(getClass().getResource("/sample/Multiplayer.fxml"));

                String[] criteria = questionsList.get(0);

                loader.getNamespace().put("player", "Human");
                loader.getNamespace().put("caption", ("Quiz" + criteria[0]));
                loader.getNamespace().put("quiz", criteria[1]);
                loader.getNamespace().put("one", criteria[2]);
                loader.getNamespace().put("two", criteria[3]);

                Parent root = loader.load();
                Stage stage = new Stage();
                Scene scene = new Scene(root);
                stage.setScene(scene);
                stage.show();


        }
    }

    public void btnPassAction(ActionEvent actionEvent) {

        RadioButton selectedRadio = (RadioButton) answerGroup.getSelectedToggle();
        optionOne.setSelected(false);
        optionTwo.setSelected(false);
        int index = multiplayerCounter - 1;

        if (multiplayerCounter == 10) {
            question.setText("Computer score: " + scoreOfComputer);
            quizCaption.setText("Your Score: " + scoreOfHuman);
            optionOne.setVisible(false);
            optionTwo.setVisible(false);
            btnPass.setVisible(false);

        }else {
            String[] criteria = questionsList.get(index);

            if (multiplayerCounter % 2 == 0) {
                headerCaption.setText("Human");
                optionOne.setDisable(false);
                optionTwo.setDisable(false);
                if (getAnswer(criteria[4], selectedRadio.getText())) {
                    scoreOfComputer++;
                }
            } else {
                headerCaption.setText("Computer");
                int ans = findRandomAnswer(Math.random());
                if (ans == 1) {
                    optionOne.setSelected(true);
                    optionTwo.setDisable(true);
                } else {
                    optionTwo.setSelected(true);
                    optionOne.setDisable(true);
                }
                if (getAnswer(criteria[4], selectedRadio.getText())) {
                    scoreOfHuman++;
                }
            }

            String[] cr = questionsList.get(multiplayerCounter);
            quizCaption.setText("Quiz " + cr[0]);
            question.setText(cr[1]);
            optionOne.setText(cr[2]);
            optionTwo.setText(cr[3]);
            multiplayerCounter++;

        }

    }

    public boolean getAnswer(String answer, String quizOption){

        if(answer.equals(quizOption)){
            return true;
        }else{
            return false;
        }

    }

    public int findRandomAnswer(double rand){
        if(rand <= 0.7){
            return 1;
        }else{
            return 2;
        }
    }

    public int getCheatAnswer(int quizNumber){
        String[] criteria = questionsList.get(quizNumber);
        if(criteria[4].equals(criteria[2])){
            return 1;
        }else{
            return  2;
        }
    }

    public String getCheatAnswerForHardLevel(int quizNumber){
        String[] criteria = questionsList.get(quizNumber);
        return criteria[2];
    }

    public void rdSelectSinglePlayer(ActionEvent actionEvent) {
        rdEasy.setVisible(true);
        rdHard.setVisible(true);
        btnStart.setDisable(false);
    }

    public void rdSelectMultiPlayer(ActionEvent actionEvent) {
        rdEasy.setVisible(false);
        rdHard.setVisible(false);
        btnStart.setDisable(false);
    }
}

0 个答案:

没有答案