1

テーブルビューを使用するプログラムを作成しています。何らかの理由で整数値をテーブルに入力できないことを除いて、すべてが順調に進んでいます。以下はメイン プログラムのコードです。プログラムを実行すると String と Double が入力されますが、Integer は入力されません。私の Product クラスでは、skuint です。何が悪いのかわからないので、洞察を探しています!

    TableView<Product> tvOrderDetails = new TableView<>();
    ObservableList<Product> ol1 = listGen(invoice);
    tvOrderDetails.setItems(ol1);

    TableColumn<Product, Integer> colItemNum = new TableColumn<>("Item#");
    colItemNum.setCellValueFactory(new PropertyValueFactory("sku"));
    TableColumn<Product, String> colDesc = new TableColumn<>("Description");
    colDesc.setCellValueFactory(new PropertyValueFactory("name"));
    TableColumn<Product, Double> colPrice = new TableColumn<>("Price");
    colPrice.setCellValueFactory(new PropertyValueFactory("price"));


    tvOrderDetails.getColumns().setAll(colItemNum, colDesc, colPrice);

基本的には商品型のテーブルビューを作成します。請求書から監視可能なリスト (製品の配列リスト) を作成し、列を作成してテーブルビューに追加します。説明と価格はどちらも適切に入力されますが、sku (整数) は入力されません。

これが私の製品クラスです。

public class Product {
private String name;
private int sku;
private double price;

public String getName() { return name; }
public int getSKU() { return sku; }
public double getPrice() { return price; }

public void setName(String n) { name = n; }
public void setSKU(int s) { sku = s; }
public void setPrice(double p) { price = p; }

Product(String n, int s, double p) {
    name = n;
    sku = s;
    price = p;        
}

@Override
public String toString() {
    return "\nName: " + name + "\nSKU: " + sku + "\nPrice" + price;
}

public boolean equals(Product two) {
    if (this.name.equals(two.getName()) && this.sku == two.getSKU() && this.price == two.getPrice())
        return true;
    else
        return false;        
}

}

ここに listGen() があります

public ObservableList<Product> listGen(Invoice i) {
    ObservableList<Product> temp = FXCollections.observableArrayList();
    for (int p = 0; p < i.getArray().size(); p++)
        temp.add(i.getArray().get(p));
    return temp;
}

Invoice オブジェクトと製品の追加は次のとおりです。

        Invoice invoice = new Invoice(new Customer());
    invoice.add(new Product("Hammer", 30042, 7.95));
    invoice.add(new Product("Drill", 30041, 59.99));
4

1 に答える 1

1

よく掘って、掘って、掘って、すべてを試した後、ようやく機能するようになりました。これがコードです。

TableColumn<Product, Integer> colItemNum = new TableColumn<>("Item#");
colItemNum.setCellValueFactory(cellData -> new SimpleIntegerProperty(cellData.getValue().getSKU()).asObject());

これが正しい方法かどうかはわかりませんが、今のところはこの方法で進めます。

于 2015-02-08T02:39:26.950 に答える