【问题标题】:JavaFX tableView, when adding items to table A, table B take them too?JavaFX tableView,将项目添加到表A时,表B也带它们?
【发布时间】:2016-04-20 15:46:45
【问题描述】:

这是对旧发票示例的编辑。 我有两张桌子A和B, table_A 用于通过搜索加载所有项目或一个项目,然后选择并单击添加按钮将其添加到 table_B。 table_B 加载以前在发票中保存的旧项目。 * 奇怪的是,当我单击所有按钮时,所有按钮也加载到 table_A 和 table_B !加上旧发票的旧保存项目。 * 当我只删除加载旧发票项目的行和将这些项目设置为 table_B 的行时,一切正常。所以这部分的问题我希望有人向我解释。 左侧为 table_A,右侧为 table_B。 *** 在首先添加以下两行代码之前,提示表格工作正常。

// 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")); 
}

【问题讨论】:

  • 如何创建表格?初始化它们时是否使用相同的列表?就像在 API 中一样:TableView(ObservableList&lt;S&gt; items)
  • 当然不,它们在创建新发票时正常工作,一个要搜索的列表,其他发票项目/秒。
  • 您能否提供有关如何创建表格以及如何设置其值的代码?
  • 您没有在答案中包含任何重要部分。设置cellValueFactorys 肯定与您的问题无关(除非您使用TableColumn 的奇怪子类)。
  • 感谢您的建议。

标签: java javafx java-8


【解决方案1】:

假设 ObservableList obsList 是 TableView 的底层列表。 然后 obsList.clear()(继承自java.util.List&lt;&gt;)不会正确更新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)

【讨论】:

  • 我曾尝试过这样的事情,但我在上面写道,问题在于不应该发生未知关系。在 table_a 中加载所有内容时:与 table_b 相同 当从 table_a 中清除所有内容时:与 table_b 相同
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-25
  • 2021-03-05
  • 2016-01-31
  • 2014-06-03
相关资源
最近更新 更多