【问题标题】:JavaFX passing data from one TableView to anotherJavaFX 将数据从一个 TableView 传递到另一个
【发布时间】:2017-04-16 17:29:53
【问题描述】:

我想要做的是将一个 TableView 中的选定行复制到另一个 TableView。

 public void addMeal()
{
    products2 = FXCollections.observableArrayList();
    tableProduct.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<productData>() {
        @Override
        public void changed(ObservableValue<? extends productData> observable, productData oldValue, productData newValue) {
            products2.add(new productData(newValue.getName(), newValue.getKcal(), newValue.getProtein(), newValue.getCarb(), newValue.getFat()));
        }
    });
    colProduct2.setCellValueFactory(new PropertyValueFactory<productData, String>("name"));
    colKcal2.setCellValueFactory(new PropertyValueFactory<productData, String>("kcal"));
    colProtein2.setCellValueFactory(new PropertyValueFactory<productData, String>("protein"));
    colCarbs2.setCellValueFactory(new PropertyValueFactory<productData, String>("carb"));
    colFat2.setCellValueFactory(new PropertyValueFactory<productData, String>("fat"));
    tableProduct2.setItems(products2);
}

products2 是 ObservableList, tableProduct2 是 TableView, colName2 等是 TableColumns

问题是,应用程序运行不正常。我必须先按下与此方法相关的按钮,然后在 TableView 1 中选择行后,我进入 TableView 2。此外,我可以单击其他几行,它们也会被添加。它就像这个按钮启用了这个选择选项,我想要的是简单地选择行,单击按钮,在另一个 TableView 中查看这一行。然后我想再选择一个,再次点击按钮,等等。

下一个问题是,一旦我再次单击按钮,它会清除第二个 TableView,从现在开始,他将添加两次选定的项目,如果我再次单击按钮,它会再次清除 TableView,现在它会添加 3 次选定的项目,等等...

【问题讨论】:

    标签: javafx tableview


    【解决方案1】:

    这里发生的情况是您没有在单击按钮之前添加侦听器。第一次单击按钮时,不会触发侦听器。只有稍后当您更改选择时,才会通知侦听器。通过第二次单击该按钮,添加了另一个侦听器,该侦听器与第一个侦听器所做的相同。因此侦听器代码将被执行两次。单击按钮a 3rd, 4th, 5th 等。 time 将向属性添加越来越多的侦听器,这些侦听器都将在属性更改时触发。

    单击按钮即可删除列表的内容,因为您将旧的items 列表替换为新的空列表。

    要简单地将所选项目添加到另一个表,将所选项目添加到该表就足够了;不需要监听器。

    设置cellValueFactorys 应在initialize 方法或fxml 文件中完成:

    @FXML
    private void initialize() {
        colProduct2.setCellValueFactory(new PropertyValueFactory<productData, String>("name"));
        colKcal2.setCellValueFactory(new PropertyValueFactory<productData, String>("kcal"));
        colProtein2.setCellValueFactory(new PropertyValueFactory<productData, String>("protein"));
        colCarbs2.setCellValueFactory(new PropertyValueFactory<productData, String>("carb"));
        colFat2.setCellValueFactory(new PropertyValueFactory<productData, String>("fat"));
    }
    
    public void addMeal() {
        productData selection = tableProduct.getSelectionModel().getSelectedItem();
    
        if (selection != null) {
            // are you sure this needs to be copied???
            tableProduct2.getItems().add(new productData(selection.getName(), selection.getKcal(), selection.getProtein(), selection.getCarb(), selection.getFat()));
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-19
      • 1970-01-01
      • 2020-10-11
      相关资源
      最近更新 更多