在JavaFX中使用tableview和tablecolumns时出现问题
我正在使用JavaFX,我想实现一个从数据库访问数据的过滤器。 下面的代码访问数据库中两个表中的数据。数据被重新检索并输入 使用javaFx的表视图。我的问题是tableview的最后一列仍然为空。 代码运行良好,工作正常,但最后一列不应为空。我必须说 最后一列的数据来自一个表,其他列的数据来自另一个表 那么,为什么我的最后一列是空的在JavaFX中使用tableview和tablecolumns时出现问题,java,database,javafx,tableview,Java,Database,Javafx,Tableview,我正在使用JavaFX,我想实现一个从数据库访问数据的过滤器。 下面的代码访问数据库中两个表中的数据。数据被重新检索并输入 使用javaFx的表视图。我的问题是tableview的最后一列仍然为空。 代码运行良好,工作正常,但最后一列不应为空。我必须说 最后一列的数据来自一个表,其他列的数据来自另一个表 那么,为什么我的最后一列是空的 @FXML private void handleButtonAction(ActionEvent e) throws SQLException { ta
@FXML
private void handleButtonAction(ActionEvent e) throws SQLException {
tableFilter.getItems().clear();
DBMain.createConnection();
DBMain.setStatement(DBMain.getConnection().createStatement());
ResultSet results=null;
CheckBox[] boxes = new CheckBox[]{checkAn1, checkAn2, checkAn3, checkSemestrul1, checkSemestrul2,
sdd, soo, analiza, algebra, marketing, economie, poo, cibernetica, contabilitate,curs1,curs2,curs3,curs4,curs5,curs6,curs7};
List<Function<Boolean, String>> clausesConstructor = Arrays.asList(
b -> b ? "an=1" : null,
b -> b ? "an=2" : null,
b -> b ? "an=3" : null,
b -> b ? "semestru=1" : null,
b -> b ? "semestru=2" : null,
b -> b ? "lower(denumire)='structuri de date'": null,
b -> b ? "lower(denumire)='sisteme de operare'": null,
b -> b ? "lower(denumire)='analiza'": null,
b -> b ? "lower(denumire)='algebra'": null,
b -> b ? "lower(denumire)='marketing'": null,
b -> b ? "lower(denumire)='economie'": null,
b -> b ? "lower(denumire)='programare orientata obiect'": null,
b -> b ? "lower(denumire)='cibernetica'": null,
b -> b ? "lower(denumire)='contabilitate'": null,
b -> b ? "numar_curs=1": null,
b -> b ? "numar_curs=2": null,
b -> b ? "numar_curs=3": null,
b -> b ? "numar_curs=4": null,
b -> b ? "numar_curs=5": null,
b -> b ? "numar_curs=6": null,
b -> b ? "numar_curs=7": null
);
List<String> list = IntStream.range(0, boxes.length)
.mapToObj(i -> clausesConstructor.get(i).apply(boxes[i].isSelected()))
.filter(Objects::nonNull).collect(Collectors.toList());
results=DBMain.getStatement().executeQuery(list.isEmpty() ? "SELECT * FROM discipline d, curs c " : list.stream().collect(Collectors.joining(") AND (", "SELECT * FROM discipline d, curs c WHERE c.id_disciplina=d.id_disciplina AND (", ")")));
System.out.println(list.isEmpty() ? "SELECT * FROM table" : list.stream().collect(Collectors.joining(") AND (", "SELECT * FROM discipline d, curs c WHERE c.id_disciplina=d.id_disciplina AND (", ")")));
while(results.next()){
String denumire=results.getString("denumire");
int an=(results.getInt("an"));
int semestru=(results.getInt("semestru"));
int numar_curs=(results.getInt("numar_curs"));
this.masterData.add(new Disciplina(denumire,an,semestru,numar_curs));
}
results.close();
DBMain.getStatement().close();
// Initialize the person table
Denumire.setCellValueFactory(
new PropertyValueFactory<Disciplina, String>("denumire"));
An.setCellValueFactory(
new PropertyValueFactory<Disciplina, Integer>("an"));
Semestru.setCellValueFactory(
new PropertyValueFactory<Disciplina, Integer>("semestru"));
numarCurs.setCellValueFactory(
new PropertyValueFactory<Disciplina, Integer>("numar_curs"));
tableFilter.setItems(masterData);
}
@FXML
私有void handleButtonAction(ActionEvent e)引发SQLException{
tableFilter.getItems().clear();
DBMain.createConnection();
DBMain.setStatement(DBMain.getConnection().createStatement());
ResultSet results=null;
复选框[]框=新复选框[]{checkAn1,checkAn2,checkAn3,checkSemestrul1,checkSemestrul2,
sdd、soo、analiza、代数、市场营销、经济学、poo、cibernetica、contabilitate、curs1、curs2、curs3、curs4、curs5、curs6、curs7};
List clausesConstructor=Arrays.asList(
b->b?“an=1”:空,
b->b?“an=2”:空,
b->b?“an=3”:空,
b->b?“semestru=1”:空,
b->b?“semestru=2”:空,
b->b?“下部(denumire)=“日期结构”:空,
b->b?“下部(denumire)=“操作系统”:空,
b->b?“下部(denumire)='analiza'”:空,
b->b?“较低(denumire)=“代数”:空,
b->b?“较低(denumire)=“营销”:空,
b->b?“下部(denumire)=“经济体”:空,
b->b?“较低(denumire)=“programare orientata OBECT”:空,
b->b?“较低(denumire)='cibernetica'”:空,
b->b?“较低(denumire)=‘可控制’”:空,
b->b?“numar\U curs=1”:空,
b->b?“numar\U curs=2”:空,
b->b?“numar\U curs=3”:空,
b->b?“numar\U curs=4”:空,
b->b?“numar\U curs=5”:空,
b->b?“numar\U curs=6”:空,
b->b?“numar\U curs=7”:空
);
List List=IntStream.range(0,box.length)
.mapToObj(i->clausesConstructor.get(i).apply(框[i].isSelected())
.filter(Objects::nonNull).collect(collector.toList());
results=DBMain.getStatement().executeQuery(list.isEmpty()?“从规程d中选择*,游标c”:list.stream().collect(collector.joining(“)和(“,”从规程d中选择*,游标c,其中c.id\u规程A=d.id\u规程A和(“,”);
System.out.println(list.isEmpty()?“SELECT*FROM table”:list.stream().collect(Collectors.joining(“)和(“,”从规程d、规程c中选择*,其中c.id\u规程A=d.id\u规程A和(“,”);
while(results.next()){
String denumire=results.getString(“denumire”);
intan=(results.getInt(“an”);
int-semestru=(results.getInt(“semestru”);
int numar_curs=(results.getInt(“numar_curs”);
添加(新规程(denumire、an、semestru、numar_curs));
}
结果:关闭();
DBMain.getStatement().close();
//初始化person表
Denumire.setCellValueFactory(
新地产价值工厂(“denumire”);
工厂(
新物业价值工厂(“an”);
Semestru.setCellValueFactory(
新地产价值工厂(“semestru”);
numarCurs.setCellValueFactory(
新地产价值工厂(“numar_curs”);
tableFilter.setItems(主数据);
}
@FXML
私有表视图表过滤器;
@FXML
私人灯塔;
@FXML
私人表格;
@FXML
私有表列Semestru;
@FXML
私人桌椅;
公营纪律{
私有字符串denumire;
私人内部网络;
semestru私人酒店;
努马库斯私人酒店;
公共纪律(字符串denumire、int an、int semestru、int nrCurs){
this.denumire=denumire;
this.an=an;
this.semestru=semestru;
this.numarCurs=nrCurs;
}
public int getNrCurs(){
返回努马库斯;
}
公共无效设置nrCurs(int nrCurs){
this.numarCurs=nrCurs;
}
公共字符串getDenumire(){
返回denumire;
}
公共无效设置denumire(字符串denumire){
this.denumire=denumire;
}
公共int getAn(){
返回一个;
}
公共无效setAn(int an){
this.an=an;
}
public int getSemestru(){
返回semestru;
}
公共空间集合符号(国际符号){
this.semestru=semestru;
}
}
您正在将“numar\u curs”
传递给您的PropertyValueFactory构造函数,但您的数据类(Districta)确实有一个具有该名称的属性
将“nrCurs”而不是“numar_curs”传递给PropertyValueFactory,因为纪律类有一个getNrCurs
方法
从:
firstNameCol.setCellValueFactory(新的PropertyValueFactory(“firstName”)代码>
在本例中,“firstName”字符串用作对Person类类型(即TableViewitems
列表的类类型)中假定的firstNameProperty()
方法的引用。此外,此方法必须返回属性
实例
如果不存在与此模式匹配的方法,则对尝试调用get()或is()(即,在上面的示例中,getFirstName()
或isFirstName()
)的支持将失效)
请为您的课程提供代码。此外,您还可以找到Alt PrintScree
@FXML
private TableView<Disciplina> tableFilter;
@FXML
private TableColumn<Disciplina, String> Denumire;
@FXML
private TableColumn<Disciplina, Integer> An;
@FXML
private TableColumn<Disciplina, Integer> Semestru;
@FXML
private TableColumn<Disciplina, Integer> numarCurs;
public class Disciplina {
private String denumire;
private int an;
private int semestru;
private int numarCurs;
public Disciplina(String denumire, int an, int semestru, int nrCurs) {
this.denumire = denumire;
this.an = an;
this.semestru = semestru;
this.numarCurs = nrCurs;
}
public int getNrCurs() {
return numarCurs;
}
public void setNrCurs(int nrCurs) {
this.numarCurs = nrCurs;
}
public String getDenumire() {
return denumire;
}
public void setDenumire(String denumire) {
this.denumire = denumire;
}
public int getAn() {
return an;
}
public void setAn(int an) {
this.an = an;
}
public int getSemestru() {
return semestru;
}
public void setSemestru(int semestru) {
this.semestru = semestru;
}
}