2014-12-27 64 views
8

我目前在設置FXML中的CheckBoxTableCell時遇到問題。我試圖將此代碼轉換爲FXML:在FXML中設置CheckBoxTableCell

tableCol.setCellValueFactory(new PropertyValueFactory<Product, Boolean>("property")); 
tableCol.setCellFactory(CheckBoxTableCell.forTableColumn(toStockCol)); 

其中'property'只是'Product'類(來自類型'boolean')的一些屬性。此代碼工作正常。我現在嘗試設置這樣的FXML,就像這樣:

<TableColumn text="Some Col"> 
    <cellValueFactory><PropertyValueFactory property="property" /></cellValueFactory> 
    <cellFactory><CheckBoxTableCell editable="true" /></cellFactory> 
</TableColumn> 

這是不行的,我得到以下錯誤(這是一個FXML LoadExeption):

Caused by: java.lang.IllegalArgumentException: Unable to coerce [email protected][styleClass=cell indexed-cell table-cell check-box-table-cell]'null' to interface javafx.util.Callback. 
at com.sun.javafx.fxml.BeanAdapter.coerce(BeanAdapter.java:495) 
at com.sun.javafx.fxml.BeanAdapter.put(BeanAdapter.java:258) 
at com.sun.javafx.fxml.BeanAdapter.put(BeanAdapter.java:54) 
at javafx.fxml.FXMLLoader$PropertyElement.set(FXMLLoader.java:1409) 
at javafx.fxml.FXMLLoader$ValueElement.processEndElement(FXMLLoader.java:786) 
at javafx.fxml.FXMLLoader.processEndElement(FXMLLoader.java:2827) 
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2536) 
... 42 more 

我想不通我做錯了什麼。另外,在我看來,幾乎沒有關於如何使用FXML在TableView中設置CheckBox的文檔。

注:我想從FXML中設置它,因爲它似乎是這個位置。我知道這可以通過FXML控制器完成。另外,我只是好奇。

任何幫助,非常感謝!

回答

5

不幸的是CheckBoxTableCell不是工廠,JavaFX包中沒有可用的工具。你必須寫自己的工廠。

<TableColumn text="Some Col"> 
    <cellValueFactory><PropertyValueFactory property="property" />  </cellValueFactory> 
    <cellFactory><CheckBoxTableCellFactory /></cellFactory> 
</TableColumn> 

不要忘了包括CheckBoxTableCellFactory否則申報像org.my.CheckBoxTableCellFactory的完整路徑或加載會給你:

public class CheckBoxTableCellFactory<S, T> implements Callback<TableColumn<S, T>, TableCell<S, T>> { 
    public TableCell<S, T> call(TableColumn<S, T> param) { 
     return new CheckBoxTableCell<S,T>(); 
    } 
} 

然後你就可以在FXML文件中定義的表列一個未發現的例外。

1

如果你喜歡在FXML中管理所有的東西,這裏是怎麼做到的。

<TableColumn text="Married" fx:id="married"> 
<cellValueFactory> 
    <PropertyValueFactory property="married" /> 
    </cellValueFactory> 
</TableColumn> 
<fx:script> 
var myCellValue = javafx.scene.control.cell.CheckBoxTableCell.forTableColumn(married); 
married.setCellFactory(myCellValue); 
</fx:script> 

//Your data model should be exposed as below. 
private final SimpleBooleanProperty married = new  SimpleBooleanProperty(false); 
public SimpleBooleanProperty marriedProperty(){ 
    return married; 
} 
相關問題