【发布时间】:2023-03-09 21:12:01
【问题描述】:
我在大学的一个项目中工作。我刚刚学习了 Java 和 JavaFX。
我有一个问题,也许有人可以帮助我。
使用这个小软件,您可以计划一周的任务。在表格视图中,您有从星期一到星期五的列。
我有一个数据库,我可以在其中获取对象“Auftragsverteilung”(这意味着计划在特定日期执行的任务)。这些对象有一个序列号 (= seriennr) 和一个日期 (= bearbeitungsdatum)。
为了在 tableview 中填满一周,我从数据库中获取了本周计划的所有任务。一周的任务保存在 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);
});
}
【问题讨论】:
-
用英文创建一个小的工作示例。请参阅:How to create a Minimal, Complete, and Verifiable example。
-
与您的问题无关:请学习 java 命名约定并遵守它们。还有一个提示:不要在名称中混用语言,很快,你会混淆所有同事,包括你自己 :) 基本的英语词汇并不难学..
-
相关:您的 switch 语句实际上什么都不做 - 它总是设置相同的 valueFactory。最好退后一步,学习一些 fx 基础知识,尤其是那些与 tableView 相关的..
-
您不应该使用循环来设置每一列的 cellValueFactory。将每一列的 cellValueFactory 设置一次。
标签: java javafx observablelist