我遇到问题我无法解决。事实是,我的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()
中声明的Objecterror: incompatible types: Number cannot be converted to double
).setOsnovica(t.getNewValue());
我的TableView使用<Nepokretnost, Number>
表单。
注意:我想我不需要Oracle网站上的这个例子,因为我不想手动更改列中单元格的内容,我只想将它们设置为值0.00。
一些简单的解决方案吗?
提前致谢。
答案 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。