JavaFX tableView,当向表A添加项目时,表B也将它们带到了它们?

时间:2016-04-20 15:46:45

标签: java javafx java-8

这是旧发票示例的编辑。 我有两张桌子A和B, table_A用于通过搜索加载所有项目或项目,然后选择并单击添加按钮将其添加到table_B。 table_B先前在发票中加载旧保存的项目。 *奇怪的是当我点击All Button所有按钮加载到table_A和table_B时!加上旧发票的旧保存项目。 *当我删除加载旧发票项目的行和将这些项目设置为table_B的行时,每件事情都可以正常工作。所以这部分的问题我希望有人向我解释。 左边是table_A,右边是table_B。  ***首先在下面添加两行代码之前提示表格工作正常。 This is a snipping of app

// The code who makes unexpected issue:
invoiceList = DBForInvoices.invoiceItems(invoice.getID());
table_B.setItems(invoiceList);

// About tables
@FXML private TableView<Item> table_A;   //Table Of Search
@FXML private TableColumn<Item, String> col_s_code;
@FXML private TableColumn<Item, String> col_s_name;

@FXML private TableView<Item> table_B;    //Table Of Order Items    
@FXML private TableColumn<Item, String> col_o_name;
@FXML private TableColumn<Item, String> col_o_quantity;
@FXML private TableColumn<Item, String> col_o_price;
@FXML private TableColumn<Item, String> col_o_warranty;

private void setItemsTables() {
//  Setting columns of Search items.
    col_s_code.setCellValueFactory(
            new PropertyValueFactory<Item, String>("code_3"));
    col_s_name.setCellValueFactory(
            new PropertyValueFactory<Item, String>("name_4")); 

//  Setting columns of invoice items.
    col_o_name.setCellValueFactory(
            new PropertyValueFactory<Item, String>("name_4"));
    col_o_quantity.setCellValueFactory(
            new PropertyValueFactory<Item, String>("quantity_6")); 
    col_o_price.setCellValueFactory( 
            new PropertyValueFactory<Item, String>("price_7"));
    col_o_warranty.setCellValueFactory(
            new PropertyValueFactory<Item, String>("warranty_8")); 
}

1 个答案:

答案 0 :(得分:0)

假设ObservableList obsList是TableView的基础列表。    然后 obsList.clear()(继承自java.util.List<>)不会正确更新tableView,但是。

同时调用setItem(obsList)无法触发刷新......但是......

obsList.removeAll(obsList)(由ObservableList覆盖)工作正常,因为它正确触发了changeEvent: - )

使用全新内容重新填充列表,然后按以下方式工作:

obsList.removeAll(obsList);
obsList.add(...); //e.g. in a loop...

obsList.removeAll(obsList);
FXCollections.copy(obsList, someSourceList)