Это первый раз, когда я использую JavaFX и TableView.У меня есть приложение, которое пользователи вводят результаты игры в гольф, чтобы создать для них значение гандикапа
У меня есть ArrayList, который я использую в качестве своей «базы данных»:
public ArrayList<Score> scoreDB = new ArrayList<>();
При этом в качестве метода добавляются значения:
public static Score scoreSubmit(DatePicker roundDate, TextField courseName, TextField courseRating, TextField courseSlope, TextField score)
{
Score temp = new Score();
//Wanted to use own Date class, must use this roundabout way to set the date correctly
LocalDate tempDate = roundDate.getValue();
temp.setRoundDate(tempDate.getMonthValue(), tempDate.getDayOfMonth(), tempDate.getYear());
temp.setCourseName(courseName.getText());
temp.setCourseRating(Double.valueOf(courseRating.getText()));
temp.setCourseSlope(Double.valueOf(courseSlope.getText()));
temp.setScore(Double.valueOf(score.getText()));
return temp;
}
note:Я использовал свой собственный класс дат, который я создал.
Я проверил, действительно ли метод работает, и ArrayList действительно получает значение.
Вот моя конструкция TableView:
//Table columns
//Creating columns and setting the display to call the values from Score class
TableColumn<Score, String> courseNameColumn = new TableColumn<>("Course Name");
courseNameColumn.setMinWidth(100);
courseNameColumn.setCellValueFactory(new PropertyValueFactory<>("courseName"));
TableColumn<Score, Date> dateColumn = new TableColumn<>("Date");
dateColumn.setMinWidth(100);
dateColumn.setCellValueFactory(new PropertyValueFactory<>("roundDate"));
TableColumn<Score, Double> scoreColumn = new TableColumn<>("Score");
scoreColumn.setMinWidth(100);
scoreColumn.setCellValueFactory(new PropertyValueFactory<>("score"));
//This adds rating and slope under one column
TableColumn courseDataColumn = new TableColumn("Course Data");
TableColumn<Score, Double> courseRatingColumn = new TableColumn<>("Course Rating");
TableColumn<Score, Double> courseSlopeColumn = new TableColumn<>("Course Slope");
courseDataColumn.getColumns().addAll(courseRatingColumn, courseSlopeColumn);
courseDataColumn.setMinWidth(100);
courseRatingColumn.setCellValueFactory(new PropertyValueFactory<>("courseRating"));
courseSlopeColumn.setCellValueFactory(new PropertyValueFactory<>("courseSlope"));
scoreTable.getColumns().addAll(courseNameColumn, dateColumn, scoreColumn, courseDataColumn);
displayLayout.setCenter(displaySP);
displaySP.setBackground(new Background(new BackgroundFill(Paint.valueOf("#006400"), CornerRadii.EMPTY, Insets.EMPTY)));
displaySP.getChildren().add(scoreTable);
displayLayout.setBottom(displayHbox);
scoreTable.setItems(addScore());
Вот переменные из моего класса оценки:
private double score = 0.0;
private double courseRating = 0.0;
private double courseSlope = 0.0;
private String courseName = "";
private Date roundDate;
Вот мои получатели для класса оценки (я читал, что они должны быть названы определенным образом, чтобы он работал):
public double getScore()
{
return score;
}
public String getCourseName()
{
return courseName;
}
public Double getCourseSlope()
{
return courseSlope;
}
public double getCourseRating()
{
return courseRating;
}
public Date getRoundDate()
{
return roundDate;
}
Вот метод возврата наблюдаемого списка:
public ObservableList<Score> addScore()
{
ObservableList<Score> scores = FXCollections.observableArrayList();
// scores.add(new Score());
for (int i = 0; i < scoreDB.size(); i++)
{
scores.add(scoreDB.get(i));
}
return scores;
}
Когда используется только закомментированный новый Score (), таблица заполняется этим значением по умолчанию.При использовании цикла for ничего не заполняется.
Любая помощь приветствуется.