2014-12-27 21 views
8

Şu anda FXML'den CheckBoxTableCell ayarlamayla ilgili bir sorunum var. Ben FXML bu kodu dönüştürmek için çalıştı:FXML'de CheckBoxTableCell Ayarı

'mülkiyet' 'Ürün' Class (türünden 'boolean') sadece bazı niteliktir
tableCol.setCellValueFactory(new PropertyValueFactory<Product, Boolean>("property")); 
tableCol.setCellFactory(CheckBoxTableCell.forTableColumn(toStockCol)); 

. Bu kod iyi çalışıyor. Şimdi bu gibi FXML bu set çalışın:

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

Bu işe yaramazsa, ben (bir FXML LoadExeption olan) aşağıdaki hatayı alıyorum:

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 

ben rakam olamaz ne yapıyorum yanlış yapıyorum. Ayrıca, benim görüşüme göre, bir CheckBox'ın FXView ile TableView'da nasıl ayarlanacağıyla ilgili hiçbir belgenin olmaması çok az.

Not: Bunu FXML'den ayarlamak istiyorum, çünkü bunun nedeni bu. Bunun FXML kontrol cihazı ile yapılabileceğini biliyorum. Ayrıca, sadece merak ediyorum.

Herhangi bir yardım büyük beğeni topluyor!

cevap

5

CheckBoxTableCell, bir fabrika değildir ve JavaFX paketinde bulunmamaktadır. Kendi fabrikanı yazmalısın.

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

Sakın CheckBoxTableCellFactory eklemeyi unutmayın ya da başka org.my.CheckBoxTableCellFactory gibi tam yolunu beyan etmek veya yükleyici size verecektir:

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

Sonra olarak FXML dosyasındaki tablo sütunu tanımlayabilirsiniz bulunamadı bir istisna.

1

FXML'de tümünü yönetmek isterseniz, bunun nasıl yapılacağı.

<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; 
}