2016-05-03 7 views
1

Je crée un TableView avec ProgressBar en utilisant FXML. J'obtiens une erreur comme ci-dessous pour la ligne qui contient ProgressBarTableCell dans le code ci-dessous. Je me suis référé à Link1 & Link2 mais incapable de comprendre quelle erreur je fais.JavaFX - TableView ProgressBar (Erreur - setCellValueFactory ne peut pas être appliqué)

Erreur:

'setCellValueFactory(javafx.util.Callback<javafx.scene.control.TableColumn.CellDataFeatures<model.TableDisplayData,java.lang.Double>,javafx.beans.value.ObservableValue<java.lang.Double>>)' 

in 'javafx.scene.control.TableColumn' cannot be applied to 

'(javafx.util.Callback<javafx.scene.control.TableColumn<model.TableDisplayData,java.lang.Double>,javafx.scene.control.TableCell<model.TableDisplayData,java.lang.Double>>)' 

code:

@FXML 
private TableView<TableDisplayData> tvDisplay; 
@FXML 
private TableColumn<TableDisplayData,String> colCarModel; 
@FXML 
private TableColumn<TableDisplayData,String> colModelIndicator; 
@FXML 
private TableColumn<TableDisplayData,Double> colSpeedProgress; 

@Override 
public void initialize(URL location, ResourceBundle resources) { 
colCarModel.setCellValueFactory(new PropertyValueFactory<TableDisplayData, String>("car")); 
colModelIndicator.setCellValueFactory(new PropertyValueFactory<TableDisplayData, String>("indicator")); 
colSpeedProgress.setCellValueFactory(new PropertyValueFactory<TableDisplayData, Double>("progressBar")); 
colSpeedProgress.setCellValueFactory(ProgressBarTableCell.<TableDisplayData> forTableColumn()); 
} 

Code pour TableDisplayData:

public class TableDisplayData{ 
private String car; 
private String indicator; 
private DoubleProperty progressBar = new SimpleDoubleProperty(); 

public TableDisplayData(String car, String indicator, double progressBar) { 
    this.car= car; 
    this.indicator = indicator; 
    setProgressBar(progressBar); 
} 
getters & setters.... 

Répondre

3

Vous êtes conf en utilisant le cellFactory avec le cellValueFactory. Le cellValueFactory indique à la colonne quelles données afficher. Le cellFactory indique la colonne comment pour afficher les données.

Vous avez donc besoin

colSpeedProgress.setCellValueFactory(new PropertyValueFactory<TableDisplayData, Double>("progressBar")); 
colSpeedProgress.setCellFactory(ProgressBarTableCell.<TableDisplayData> forTableColumn()); 

(note de la deuxième ligne est modifiée pour setCellFactory, non setCellValueFactory).