我正在为大学项目。我刚刚学习了Java和JavaFX。我有问题,也许有人可以帮助我。使用这个小软件,您可以计划一周的任务。在表格视图中,您有从星期一到星期五的列。我有一个数据库,可以在该数据库中获取对象“ Auftragsverteilung”(这是指计划在特定日期进行的任务)。这些对象具有序列号(= seriennr)和日期(= bearbeitungsdatum)。为了在表格视图中填写一周,我从数据库中获得了该周计划的所有任务。本周的任务保存在ObservableList rechnerWochenansichtTabelle中。您可以从组合框中选择星期。这就是为什么我在组合框上有一个侦听器的原因。现在,我查看ObservableList并检查日期是否是星期一,星期四等。这样行得通。但是,如果我写col_RW_Montag.setCellValueFactory(new PropertyValueFactory (“ seriennr”)),则该列将获取保存在observableList中的所有序列号,但是我需要从该特定日期开始的特定序列号。如何从日期中获取特定的序列号,并在其中填充列号?我希望您能理解所有内容,因为该项目使用德语。如果您需要更多信息或更多代码,请告诉我。谢谢。“ Auftragsverteilung”课程(模型)public class Auftragsverteilung { private Date bearbeitungsdatum; private Integer seriennr; public Auftragsverteilung(Integer seriennr, Date bearbeitungsdatum) { super(); this.seriennr = seriennr; this.bearbeitungsdatum = bearbeitungsdatum; } public Date getBearbeitungsdatum() { return bearbeitungsdatum; } public void setBearbeitungsdatum(Date bearbeitungsdatum) { this.bearbeitungsdatum = bearbeitungsdatum; } public Integer getSeriennr() { return seriennr; } public void setSeriennr(Integer seriennr) { this.seriennr = seriennr; }}“ AuftragsansichtController”类(控制器)public class RechneransichtController implements Initializable { @FXML private ComboBox<String> comboBox_RW_Wochenansicht; @FXML private TableView<Auftragsverteilung> tableRechnerWoche; @FXML private TableColumn<Auftragsverteilung, Integer> col_RW_Montag; @FXML private TableColumn<Auftragsverteilung, Integer> col_RW_Dienstag; @FXML private TableColumn<Auftragsverteilung, Integer> col_RW_Mittwoch; @FXML private TableColumn<Auftragsverteilung, Integer> col_RW_Donnerstag; @FXML private TableColumn<Auftragsverteilung, Integer> col_RW_Freitag; private Datenbank db = new Datenbank(); ObservableList<Auftragsverteilung> rechnerWochenansichtTabelle = FXCollections.observableArrayList(); public void wochenansichtFuellen() { // ComboBox Listener comboBox_RW_Wochenansicht.getSelectionModel().selectedItemProperty().addListener((options) -> { tableRechnerWoche.getItems().clear(); // the week selected from the comboBox String wochenAuswahl = comboBox_RW_Wochenansicht.getSelectionModel().selectedItemProperty().getValue(); // DD.MM.YYYY-DD.MM.YYYY // String split, first date = monday, last date = friday String startdatum = wochenAuswahl.substring(0, 10); String enddatum = wochenAuswahl.substring(11, 21); // db = Database object with method getTasksFromWeek try { rechnerWochenansichtTabelle.addAll(db.getRechnerAusAuftragsverteilungWoche(startdatum, enddatum)); } catch (SQLException e) { e.printStackTrace(); } for (int i = 0; i < rechnerWochenansichtTabelle.size(); i++) { Date d = rechnerWochenansichtTabelle.get(i).getBearbeitungsdatum(); Integer seriennr = rechnerWochenansichtTabelle.get(i).getSeriennr(); // SERIENNUMER DIE REIN MUSS switch(simpleDateformat.format(d)) { case "Montag": col_RW_Montag.setCellValueFactory(new PropertyValueFactory<>("seriennr")); break; case "Dienstag": col_RW_Dienstag.setCellValueFactory(new PropertyValueFactory<>("seriennr")); break; case "Mittwoch": col_RW_Mittwoch.setCellValueFactory(new PropertyValueFactory<>("seriennr")); break; case "Donnerstag": col_RW_Donnerstag.setCellValueFactory(new PropertyValueFactory<>("seriennr")); break; case "Freitag": col_RW_Freitag.setCellValueFactory(new PropertyValueFactory<>("seriennr")); break; default: break; } } tableRechnerWoche.setItems(rechnerWochenansichtTabelle); });} 最佳答案 您要在单个行中放置多个Auftragsverteilung对象。由于items列表中的每个元素都对应于表的一行,因此您的方法是错误的。您需要将多个Auftragsverteilung对象存储在单个项目中,以正确访问数据或使用自定义cellValueFactory来检索数据并使用标识星期的项目。此外,除非您专门设置simpleDateformat将德语用作语言环境,否则我不建议您使用德语工作日依赖该程序。否则,更改默认语言环境可能会破坏您的程序,并且我不会指望您的教授使用在测试程序的计算机上使用德语语言环境的教授。以下代码假定您未在fxml文件中指定列,而是以编程方式创建它们。在以下代码中,我使用Auftragsverteilung[]将对象存储为星期一,星期二,...,星期五。此外,它使用java.time API:@Overridepublic void initialize​(URL location, ResourceBundle resources) { final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEEE", Locale.GERMAN); for (int i = 1; i <= lastDay; i++) { final int dayIndex = i-1; DayOfWeek day = DayOfWeek.of(i); TableColumn<Auftragsverteilung[], Integer> column = new TableColumn<>(formatter.format(day)); column.setCellValueFactory(cd -> { Auftragsverteilung auftrag = cd.getValue()[dayIndex]; return new SimpleObjectProperty<>(auftrag == null ? null : auftrag.getSeriennr()); }); tableRechnerWoche.getColumns().add(column); } tableRechnerWoche.setItems(rechnerWochenansichtTabelle); ...}@FXMLprivate TableView<Auftragsverteilung[]> tableRechnerWoche;@FXMLprivate TableColumn<Auftragsverteilung[], Integer> col_RW_Montag;@FXMLprivate TableColumn<Auftragsverteilung[], Integer> col_RW_Dienstag;@FXMLprivate TableColumn<Auftragsverteilung[], Integer> col_RW_Mittwoch;@FXMLprivate TableColumn<Auftragsverteilung[], Integer> col_RW_Donnerstag;@FXMLprivate TableColumn<Auftragsverteilung[], Integer> col_RW_Freitag;...public void wochenansichtFuellen() { // ComboBox Listener (ChangeListener) comboBox_RW_Wochenansicht.valueProperty().addListener((o, oldValue, newValue) -> { rechnerWochenansichtTabelle.clear(); // String split, first date = monday, last date = friday String startdatum = newValue.substring(0, 10); String enddatum = newValue.substring(11, 21); // db = Database object with method getTasksFromWeek try { // depending on the return type and order of the elements // rechnerWochenansichtTabelle.add(db.getRechnerAusAuftragsverteilungWoche(startdatum, enddatum)); // may be sufficient instead of the following code // store each Auftragsverteilung in array with index corresponding to the day of week of the bearbeitungsdatum Auftragsverteilung[] row = new Auftragsverteilung[DayOfWeek.FRIDAY.getValue()]; for (Auftragsverteilung auftrag : db.getRechnerAusAuftragsverteilungWoche(startdatum, enddatum)) { LocalDate date = auftrag.getBearbeitungsdatum().toLocalDate(); row[date.getDayOfWeek().getValue() - 1] = auftrag; } rechnerWochenansichtTabelle.add(row); } catch (SQLException e) { e.printStackTrace(); } });}关于java - JavaFX:具有来自ObservableList的特定数据的TableView填充列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56563413/
10-10 16:39