Почему TableView не отображает значение столбца, значение которого рассчитывается из других столбцов? Пожалуйста, предложите мне несколько решений - PullRequest
0 голосов
/ 06 октября 2019

Значение формы вставляется в базу данных. Но при получении данных появляются все поля, кроме двух последних столбцов (результат и оценка), которые зависят от значения других столбцов. Это изображение таблицы Код показан ниже. Для вставки:

               btnAddNewStudent.setOnAction(actionEvent -> 
                    try {
                Connection connection = null;
                PreparedStatement statement = null;
                ResultSet resultSet = null;
                connection = DB.connectDb();
                connection.setAutoCommit(false);
                String query = "INSERT INTO java2(ID, StudentName, Quiz, A1,A2, Exam,result, grade) VALUES(?, ?, ?, ?,?,?,?,?)";
                statement = connection.prepareStatement(query, Statement.RETURN_GENERATED_KEYS);
                int counter = 1;
                statement.setString(counter++, studentId.getText());
                statement.setString(counter++, studentName.getText());
                statement.setString(counter++, quizMarks.getText());
                statement.setString(counter++, assignmentOneMarks.getText());
                statement.setString(counter++, assignmentTwoMarks.getText());
                statement.setString(counter++, examMarks.getText());

                double totalmarks = Double.parseDouble(quizMarks.getText()) * 0.05
                        + Double.parseDouble(assignmentOneMarks.getText()) * 0.15
                        + Double.parseDouble(assignmentTwoMarks.getText()) * 0.2
                        + Double.parseDouble(examMarks.getText()) * 0.6;

                String grade = "";
                if (totalmarks >= 85 && totalmarks < 100) {
                    grade = "HD";
                } else if (totalmarks >= 75 && totalmarks < 85) {
                    grade = "DI";
                } else if (totalmarks >= 65 && totalmarks < 75) {
                    grade = "CR";
                } else if (totalmarks >= 50 && totalmarks < 65) {
                    grade = "PS";
                } else if (totalmarks > 50) {
                    grade = "Fail";
                }

                statement.setString(counter++, Double.toString(totalmarks));
                statement.setString(counter++, grade);

                statement.executeUpdate();
                connection.commit();
                this.alert("Save", "Successful!", Alert.AlertType.INFORMATION);

                data.clear();

Вставная часть работает нормально и вставляет значение в таблицу базы данных.

И код для извлечения данных

// назначение данных вячейка таблицы

    TableColumn name = new TableColumn("Name");
    name.setCellValueFactory(new PropertyValueFactory<>("name"));

    TableColumn id = new TableColumn("Id");
    id.setCellValueFactory(new PropertyValueFactory<>("id"));

    TableColumn quiz = new TableColumn("Quiz");
    quiz.setCellValueFactory(new PropertyValueFactory<>("quiz"));

    TableColumn a1 = new TableColumn("A1");
    a1.setCellValueFactory(new PropertyValueFactory<>("a1"));

    TableColumn a2 = new TableColumn("A2");
    a2.setCellValueFactory(new PropertyValueFactory<>("a2"));

    TableColumn exam = new TableColumn("Exam");
    exam.setCellValueFactory(new PropertyValueFactory<>("exam"));

    TableColumn result = new TableColumn("Results");
    result.setCellValueFactory(new PropertyValueFactory<>("result"));

    TableColumn grades = new TableColumn("Grade");
    grades.setCellValueFactory(new PropertyValueFactory<>("grades"));

    table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
    //adding all the data in the cell of the table
    table.getColumns().addAll(name, id, quiz, a1, a2, exam, result,grades);
    table.setItems(data);
    Connection connection = null;
    connection = DB.connectDb();
    ResultSet resultSet = connection.createStatement().executeQuery("select * from java2");
    while (resultSet.next()) {
        String studName = resultSet.getString("StudentName");
        String studId = resultSet.getString("ID");

        double quizMark = Double.parseDouble(resultSet.getString("Quiz"));
        double a1mark = Double.parseDouble(resultSet.getString("A1"));
        double a2mark = Double.parseDouble(resultSet.getString("A2"));
        double examMark = Double.parseDouble(resultSet.getString("Exam"));
        double totalmarks=Double.parseDouble(resultSet.getString("result"));
        String grade=resultSet.getString("grade");
        System.out.println(grade);
        data.add(new Student(studName, studId, quizMark, a1mark, a2mark, examMark, totalmarks, 
         grade));
    }

А код для ученического класса приведен ниже

public class Student {
private final String name;
private final String id;
private final double quiz;
private final double a1;
private final double a2;
private final double exam;
private final double result;
private final String grade;


public Student(String name, String id, double quiz, double a1, double a2, 
    double exam, double result, String grade) {
    this.name = name;
    this.id = id;
    this.quiz = quiz;
    this.a1 = a1;
    this.a2 = a2;
    this.exam = exam;
    this.result = result;
    this.grade = grade;

}


public String getName() {
    return name;
}

public void setName(String studentName) {
    studentName = this.name;
}

public String getId() {
    return id;
}

public void setId(String studentId) {
    studentId = this.id;
}

public double getQuiz() {
    return quiz;
}

public void setQuiz(double quizMarks) {
    quizMarks = this.quiz;
}

public double getA1() {
    return a1;
}

public void setA1(double assignmentOneMarks) {
    assignmentOneMarks = this.a1;
}

public double getA2() {
    return a2;
}

public void setA2(double assignmentTwoMarks) {
    assignmentTwoMarks = this.a2;
}

public double getExam() {
    return exam;
}

public void setExam(double exam) {
    exam = this.exam;
}

public double getresult() {
    return result;
}

public void setresult(double result) {
    result = this.result;
}

public String getgrade() {
    return grade;
}

public void setgrade(String grade) {
    grade = this.grade;
}

}

1 Ответ

2 голосов
/ 06 октября 2019

Ваши получатели (и установщики) для результата и оценки именуются всеми строчными буквами, в отличие от стандартного соглашения об именах, где имя свойства должно начинаться с заглавной буквы. Это означает, что когда JavaFx не может найти имя метода, которое он ожидает для этих столбцов.

Поэтому замените ваши декларации на:

public double getResult() {
    return result;
}

public void setResult(double result) {
    result = this.result;
}

public String getGrade() {
    return grade;
}

public void setGrade(String grade) {
    grade = this.grade;
}

РЕДАКТИРОВАТЬ: имя PropertyValueFactory также должно совпадать:

grades.setCellValueFactory(new PropertyValueFactory<>("grade"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...