2016-05-03 2 views
1

Создает TableView с ProgressBar с использованием FXML. Я получаю ошибку, как показано ниже для строки, которая содержит ProgressBarTableCell в приведенном ниже коде. Я ссылался на Link1 & Link2, но не смог выяснить, какую ошибку я делаю.JavaFX - TableView ProgressBar (Ошибка - setCellValueFactory не может быть применена)

Ошибка:

'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>>)' 

Код:

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

Код для 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.... 

ответ

3

Вы конф используя cellFactory с cellValueFactory. cellValueFactory сообщает колонке , что данные для отображения. cellFactory сообщает столбцу как для отображения данных.

Так что вам нужно

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

(обратите внимание, что вторая строка изменяется на setCellFactory, не setCellValueFactory).

Смежные вопросы