有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

TableView列的java编辑值

我遇到了我无法解决的问题。问题是,我的TableView已经被填充,我需要匹配我的条件的单元格将值设置为零。我有一个变量korZemljiste,如果我的条件是满的,Colonovica列中的单元格需要设置为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()中声明的对象

error: incompatible types: Number cannot be converted to double
                        ).setOsnovica(t.getNewValue());

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

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

有什么简单的解决方案吗

提前谢谢


共 (2) 个答案

  1. # 1 楼答案

    对于第一个错误,由于表列类型不是String,因此不能使用^{}的无参数版本。潜在的问题是,要编辑单元格,文本字段提供一个String,单元格中的数据是一个Number。您需要使用overloaded form of ^{}提供一个转换器:

    colOsnovica.setCellFactory(TextFieldTableCell.forTableColumn(new NumberStringConverter()));
    

    对于第二个错误,只需将t.getNewValue()(返回Number)替换为t.getNewValue().doubleValue()(获取Numberdouble表示)

  2. # 2 楼答案

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

    我没意识到有必要在这里下课。我之前刚开始申请。在这里,我刚刚更改了JTableView字段的内容。这有点不同,谢谢你的帮助

    我发布了应用程序的屏幕截图。在屏幕截图上,我已经在TableView中添加了我想要的元素。我发布的有问题的代码是Calculate(бачааааа)按钮事件处理程序的一部分。在本例中,计算应将字段аааааа的内容更改为0.00

    enter image description here