2016-12-01 193 views
0

我試圖做的是將一個TableView中的選定行復制到另一個TableView中。JavaFX將數據從一個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); 
} 

產品2是ObservableList,他們 tableProduct2是的TableView, colName2等都是TableColumn來

問題是,應用程序工作正常不。我必須先按下與此方法連接的按鈕,然後在TableView 1中選擇行之後,我才能使用TableView 2.另外,我可以單擊其他幾行,然後它們也將被添加。它就像這個按鈕啓用這個選擇選項,我想要的只是選擇行,單擊按鈕,在另一個TableView中看到這一行。然後我想選擇另一個,再次點擊按鈕等。

接下來的問題是,一旦我再次單擊按鈕,它清除第二個TableView,從現在開始,他將添加選定的項目兩次,如果我再次單擊按鈕,它再次清除TableView,現在它添加選定的項目3次,等等...

回答

0

這裏發生的是,您不要在點擊按鈕之前添加偵聽器。第一次點擊按鈕時,這不會觸發收聽者。只有在稍後當您更改選擇時,listnener纔會收到通知。通過再次單擊該按鈕,可以添加另一個偵聽器,這與第一個偵聽器所做的相同。因此偵聽器代碼將被執行兩次。點擊第3,第4,第5等按鈕。時間將會增加越來越多的聽衆,這些財產將會在財產變化時觸發。

由於您用舊的空白表替換舊的items列表,因此點擊該按鈕後列表中的內容將被刪除。

要簡單地將所選項目添加到其他表格,只需將選定項目添加到該表格;沒有聽衆需要。

@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())); 
    } 
} 

設置cellValueFactory S的關係在initialize方法或在FXML文件中完成

相關問題