当前位置: 首页 > 知识库问答 >
问题:

JavaFx TableView(TV)with ObservableList(OL):如何编辑TV并自动更新OL

龚寂弦
2023-03-14

我正在使用附在TableView上的ObservableList。现在,首先我想使TableView可编辑,然后在编辑特定字段时,我想更新ObservableList中的相应对象。但不知何故,我很难从TableView中获取更新的值。如果我使用

电视栏目。setCellFactory(TextFieldTableCell.forTableColumn())

然后我得到错误:

线程“JavaFX应用程序线程”java中出现异常。lang.ClassCastException:java。lang.Integer不能转换为java。lang.String

我的细胞价值工厂:

电视栏目。setCellValueFactory(新属性ValueFactory

型号:

public interface SaleItem {
    void setProductName(String productName);
    void setPrice(double price);
    double getPrice();
    double getTotalPrice();
    void setTotalPrice();
    String getProductCode();
    String getProductCodeDescription();
    String getDescription();
    String getProductName();
}

public abstract class NonFuel implements SaleItem {
    public SimpleIntegerProperty quantity = new SimpleIntegerProperty();
    public SimpleDoubleProperty price = new SimpleDoubleProperty(0.0);
    public SimpleStringProperty productName = new SimpleStringProperty("");
    SimpleDoubleProperty totalPrice = new SimpleDoubleProperty(0.0);
    // getter and setter
}

public class Drinks extends NonFuel {
    public Drinks() {
        setProductName("Coffee");
        setPrice(2.20);
        setQuantity(1);
    }
    // getter and setter
}

有人能帮助从电视中获得新的价值或更新其背后的OL吗?

提前感谢。

共有1个答案

松正阳
2023-03-14

我发现有两个问题:

>

  • 需要将模型中的双精度或整数值与字符串进行转换。我可以在以下列中直接配置:

    tv_column.setCellFactory(
        TextFieldTableCell.forTableColumn(
            new StringConverter<Double>() {
                @Override
                public String toString(Double object) {
                    return Double.toString(object);
                }
    
                @Override
                public Double fromString(String string) {
                    return Double.valueOf(string);
                }
            }
        )
    );
    

    另一方面,我必须获得编辑单元格的事件,并将新值赋予ObservableList的项。然后我必须更新项目并刷新TableView:

    tv_column.setOnEditCommit(
        new EventHandler<TableColumn.CellEditEvent<SaleItem, Double>>() {
            @Override
            public void handle(TableColumn.CellEditEvent<SaleItem, Double> event) {
                SaleItem saleItem =  event.getTableView().getItems().get(event.getTablePosition().getRow());
                saleItem.setQuantity(event.getNewValue());
                saleItem.updatePrice();
                tv.refresh();
            }
        }
    );
    

  •  类似资料:
    • tv

      Tidy Viewer (tv) Tidy Viewer (tv) is a cross-platform csv pretty printer that uses column styling to maximize viewer enjoyment. Pretty Printing Contents Installation Examples Significant Figure Defini

    • Chrome TV 是一个基于Chrome的在线网络电视扩展,通过Chrome TV你可以在Chrome中观看全球超过3000个电视台。Chrome TV提供多种电视节目分类,同时你也可以选择不同国家的电视台观看。 需要注意的是使用Chrome TV可能需要安装 Windows Media Player 插件,如果你安装此扩展后无法使用,请参考官方提供的方法:登陆 http://port25.te

    •   使用说明: https://git.oschina.net/hailongqiu/AndroidTVWidget/wikis/AndroidTVWidget-use-manual 键盘使用说明: https://git.oschina.net/hailongqiu/AndroidTVWidget/wikis/Android-TV-%E5%A6%82%E4%BD%95%E4%BD%BF%E7%9

    • NativeScript ❤️ Android TV YouTube video of this app, running on a Phone and TV (23s) YouTube video if this app, running on a TV, with D-Pad controls (20s) What? Unsurprisingly Android TV is very much

    • homebridge-bravia-tv v3 Homebridge dynamic platform plugin for Sony Bravia Android TVs Note: If you are looking for the non dynamic version, install the old version! homebridge-sonybravia-platform v2

    • homebridge-webos-tv HomeKit integration for LG webOS TVs how it's supposed to be homebridge-webos-tv is a plugin for homebridge which allows you to control your LG webOS TV from your Home app! It shou