【问题标题】:Problems using tableview and tablecolumns in JavaFX在 JavaFX 中使用 tableview 和 tablecolumns 的问题
【发布时间】:2016-04-10 00:07:10
【问题描述】:

我正在使用 JavaFX,我想实现一个从数据库中访问数据的过滤器。 下面的代码访问数据库中两个表中的数据。数据被检索并放入 一个表视图,使用 javaFx。我的问题是表格视图的最后一列仍然为空。 代码运行良好,运行良好,但最后一列不应为空。我必须说 最后一列的数据来自一个表,其他列的数据来自另一个表。

那么,为什么我的最后一列是空的?

@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
    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;
    }

}

【问题讨论】:

  • 请包含您的Disciplina 课程的代码。此外,您会发现 Alt-PrintScreen 和粘贴到 Paint 是制作屏幕截图的更好工具。
  • @VGR 我已经添加了Disciplina 类。

标签: java database javafx tableview


【解决方案1】:

您正在将 "numar_curs" 传递给您的 PropertyValueFactory 构造函数,但您的数据类 (Disciplina) 确实有一个具有该名称的属性。

将“nrCurs”而不是“numar_curs”传递给 PropertyValueFactory,因为 Disciplina 类有一个 getNrCurs 方法。

来自PropertyValueFactory documentation

firstNameCol.setCellValueFactory(new PropertyValueFactory&lt;Person,String&gt;("firstName"));

在此示例中,“firstName”字符串用作对 Person 类类型(这是 TableView items 列表的类类型)中假定的 firstNameProperty() 方法的引用。此外,此方法必须返回一个 Property 实例。...

如果不存在与此模式匹配的方法,则支持尝试调用 get() 或 is()(即上面示例中的 getFirstName()isFirstName())...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-21
    • 1970-01-01
    • 2018-08-12
    • 2017-01-18
    • 2021-09-07
    • 1970-01-01
    • 2014-10-21
    相关资源
    最近更新 更多