编辑TableView列

时间:2016-02-24 12:32:41

标签: java javafx tableview tablecolumn

我遇到问题我无法解决。事实是,我的TableView已经填充,我需要符合我的标准的单元格设置零值。我有变量korZemljiste,如果我的条件是colosnovica列中的fullfilled单元格需要设置为值0.00。

以下是我的尝试:

    if (korZemljiste < 10000)
    {
        tblTabela.getItems().stream().forEach((o)
           -> {
                colOsnovica.setCellFactory(TextFieldTableCell.forTableColumn());
                colOsnovica.setOnEditCommit(
                    new EventHandler<CellEditEvent<Nepokretnost, Number>>() {
                    @Override
                    public void handle(CellEditEvent<Nepokretnost, Number> t) {
                        ((Nepokretnost) t.getTableView().getItems().get(
                        t.getTablePosition().getRow())
                        ).setOsnovica(t.getNewValue());
    }
});});}

抱歉,由于代码难看,无法正确复制。

这部分我从Oracle示例中修改,我得到错误:

error: incompatible types: no instance(s) of type variable(s) S exist so that Callback<TableColumn<S,String>,TableCell<S,String>> conforms to Callback<TableColumn<Nepokretnost,Number>,TableCell<Nepokretnost,Number>>
                colOsnovica.setCellFactory(TextFieldTableCell.forTableColumn());

其中S是一个类型变量:     S扩展了方法forTableColumn()

中声明的Object
error: incompatible types: Number cannot be converted to double
                        ).setOsnovica(t.getNewValue());

我的TableView使用<Nepokretnost, Number>表单。

注意:我想我不需要Oracle网站上的这个例子,因为我不想手动更改列中单元格的内容,我只想将它们设置为值0.00。

一些简单的解决方案吗?

提前致谢。

2 个答案:

答案 0 :(得分:1)

对于第一个错误,由于您的表列类型不是String,因此您无法使用TextFieldTableCell.forTableColumn()的无参数版本。根本问题在于,要编辑单元格,文本字段提供String,单元格中的数据为Number。您需要使用overloaded form of TextFieldTableCell.forTableColumn(...)

提供转换器
colOsnovica.setCellFactory(TextFieldTableCell.forTableColumn(new NumberStringConverter()));

对于第二个错误,只需将t.getNewValue()(返回Number)替换为t.getNewValue().doubleValue()(获取double的{​​{1}}表示。

答案 1 :(得分:0)

@詹姆斯-d

嗯,我的错。类很简单,这里是:

package obracun;

import javafx.beans.property.SimpleDoubleProperty;
import javafx.beans.property.SimpleStringProperty;

/**
*
* @author Dalibor
*/
public class Nepokretnost {

private final  SimpleStringProperty tipNepokretnosti;
private final  SimpleStringProperty zona;
private final  SimpleStringProperty pravo;
private final  SimpleDoubleProperty povrsina;
private final  SimpleDoubleProperty amortizacija;
private final  SimpleDoubleProperty osnovica;
private final  SimpleDoubleProperty kredit;
private final  SimpleDoubleProperty porez;

public Nepokretnost(String tipNepokretnosti, String zona, String pravo, 
        Double povrsina, double amortizacija, Double osnovica, Double kredit, Double porez) {
    this.tipNepokretnosti = new SimpleStringProperty(tipNepokretnosti);
    this.zona = new SimpleStringProperty(zona);
    this.pravo = new SimpleStringProperty(pravo);
    this.povrsina = new SimpleDoubleProperty(povrsina);
    this.amortizacija = new SimpleDoubleProperty(amortizacija);
    this.osnovica = new SimpleDoubleProperty(osnovica);
    this.kredit = new SimpleDoubleProperty(kredit);
    this.porez = new SimpleDoubleProperty(porez);


}

public String getTipNepokretnosti() {
    return tipNepokretnosti.get();
}

public void setTipNepokretnosti(String tipNepokretnosti) {
    this.tipNepokretnosti.set(tipNepokretnosti);
}

public String getZona() {
    return zona.get();
}

public void setZona(String zona) {
    this.zona.set(zona);
}

public String getPravo() {
    return pravo.get();
}

public void setPravo(String pravo) {
    this.pravo.set(pravo);
}

public double getPovrsina() {
    return povrsina.get();
}

public void setPovrsina(double povrsina) {
    this.povrsina.set(povrsina);
}

public double getAmortizacija() {
    return amortizacija.get();
}

public void setAmortizacija(double amortizacija) {
    this.amortizacija.set(amortizacija);
}

public double getOsnovica() {
    return osnovica.get();
}

public void setOsnovica(double osnovica) {
    this.osnovica.set(osnovica);
}

public double getKredit() {
    return kredit.get();
}

public void setKredit(double kredit) {
    this.kredit.set(kredit);
}

public double getPorez() {
    return porez.get();
}

public void setPorez(double porez) {
    this.porez.set(porez);
}

}

我没有意识到有必要在这里发帖。我刚刚在Swing中制作了这个应用程序。我刚刚改变了JTableView字段的内容。这有点不同,感谢您的帮助。

我发布了app的截图。截图我已经在TableView中添加了我想要的元素。我发布的代码是Calculate(Обрачун)按钮事件处理程序的一部分。在此示例中,计算应将字段Основица的内容更改为0.00。

enter image description here