Сразу скажу что с таблицами уже был успешный опыт например вот класс работника:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
package model;
import javafx.beans.property.*;
public class Employee {
private IntegerProperty id;
private StringProperty name;
private StringProperty job;
public Employee(){
this.id = new SimpleIntegerProperty();
this.name = new SimpleStringProperty();
this.job = new SimpleStringProperty();
}
public void setId(Integer id) {
this.id.setValue(id);
}
public int getId() {
return this.id.get();
}
public IntegerProperty getIdProperty() {
return this.id;
}
public void setName(String name) {
this.name.setValue(name);
}
public String getName() {
return this.name.get();
}
public StringProperty getNameProperty() {
return this.name;
}
public void setJob(String job) {
this.job.setValue(job);
}
public String getJob() {
return this.job.get();
}
public StringProperty getJobProperty() {
return this.job;
}
}
а вот код, который отлично инициализирует таблицу:
1.
2.
3.
4.
5.
6.
7.
private void initEmployeeTable(final int department_id) throws ClassNotFoundException, SQLException {
employeeIdColumn.setCellValueFactory(cellData -> cellData.getValue().getIdProperty().asObject());
employeeNameColumn.setCellValueFactory(cellData -> cellData.getValue().getNameProperty());
employeeJobColumn.setCellValueFactory(cellData -> cellData.getValue().getJobProperty());
ObservableList<Employee> employeesList = EmployeeDAO.getAllFromDepartment(department_id);
employeeTable.setItems(employeesList);
}
по аналогии я решил создать календарь для работника:
есть 12 таблиц на каждый месяц, в которых будет столько столбцов, сколько дней в месяце. Работаем поочередно с каждой такой таблицей.
В таблице в каждом столбце дня должна быть только одна запись - это String специальный код дня (явка, не явка, выходной)
Я создал календарь:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
package model;
import java.sql.Date;
import java.time.LocalDate;
import java.time.YearMonth;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
public class Calendar2 {
private int employeeId;
private int currentYear;
private Map<Date, String> dates;
private List<ArrayList<SimpleStringProperty>> datecodes;
public Calendar2(final int year, final int employee_id) {
this.employeeId = employee_id;
this.currentYear = year;
this.dates = new HashMap<Date, String>();
this.datecodes = new ArrayList<>();
for(int monthCount = 1; monthCount <=12; monthCount++) {
ArrayList<SimpleStringProperty> month = new ArrayList<>();
datecodes.add(month);
}
}
public void setDayCode(final int month, final int day, String name) {
this.datecodes.get(month-1).get(day-1).setValue(name);
}
public String getDayCode(final int month, final int day) {
return this.datecodes.get(month-1).get(day-1).get();
}
public StringProperty getDayCodeProperty(final int month, final int day) {
return this.datecodes.get(month-1).get(day-1);
}
public void setDatesMap(Map<Date, String> map) {
this.dates = map;
}
public int getEmployeeId() {
return this.employeeId;
}
public int getMonthDayCount(final int monthId) {
return this.datecodes.get(monthId).size();
}
public void prepareDatesByMonth() {
for (int monthNum = 1; monthNum <= 12; monthNum++) {
YearMonth ymObject = YearMonth.of(currentYear, monthNum);
int maxDayNum = ymObject.lengthOfMonth();
for(int dayCount = 1; dayCount <= maxDayNum; dayCount++) {
Date date = Date.valueOf(LocalDate.of(currentYear,monthNum,dayCount));
if(dates.containsKey(date)) {
if(dates.get(date) == null)
datecodes.get(monthNum-1).add(new SimpleStringProperty("?"));
else
datecodes.get(monthNum-1).add(new SimpleStringProperty(dates.get(date)));
}
else {
datecodes.get(monthNum-1).add(new SimpleStringProperty("X"));
}
}
}
}
}
но как только пытаюсь подвязать значения к столбцам, мне пишет error:
1.
2.
3.
4.
5.
6.
7.
8.
for(int monthCount = 1; monthCount <= 12; monthCount++) {
int maxMonthDay = Calendar2.getMonthDayCount(monthCount);
for(int dayCount = 1; dayCount <= maxMonthDay; dayCount++) {
monthTable.get(monthCount-1).getColumns().get(dayCount-1).setCellValueFactory(
cellData -> cellData.getValue().getDayCodeProperty(monthCount, dayCount));
}
}
ошибка на 5 строке
- Type mismatch: cannot convert from StringProperty to
ObservableValue<capture#1-of ?>
не понимаю зачем оно конвертировать хочет в ObservableValue ведь я потом в ObservableList<Calendar2> добавлю этот календарь?
если конкретно, то у меня есть ArrayList заполненный нужными строками, есть таблица с таким же количеством колонок.
как мне эти строки перенести в таблицу один к одному?