2016-04-03 15 views
0

Farklı veri türleri ile yaklaşık 18 sütun içeren bir tablo görünümüm var. Tüm bu veri türlerini işleyebilecek özelleştirilmiş bir tablo hücresi tanımlayabilir miyim? Tüm bu sütunlar için hücre fabrikasını bu özelleştirilmiş tablo hücresine ayarlayabilir.Tablo görünümünde farklı sütun türleri için uygun olan özelleştirilmiş tablo hücresini uygulayabilirim Javafx

public class SimpleTextCell<S,T> extends TableCell<S ,T> { 

    private final Function<T,String> textExtractor ; 

    public SimpleTextCell(Function<T, String> textExtractor) { 
     this.textExtractor = textExtractor ; 
    } 

    public SimpleTextCell() { 
     this(T::toString); 
    } 

    @Override 
    protected void updateItem(T item, boolean empty) { 
     super.updateItem(item, empty); 
     setText(empty ? null : textExtractor.apply(item)); 
    } 
} 

(ve ihtiyacınız gibi updateItem(...) yönteme daha fazla işlevsellik ekleyebilirsiniz):

cevap

0

yalnızca metin görüntüleme ise, böyle bir şey yapabilirsiniz.

Şimdi

TableColumn<Item, String> someStringColumn = new TableColumn<>(); 
someStringColumn.setCellFactory(tc -> new SimpleTextCell<>()); 

TableColumn<Item, Double> someDoubleColumn = new TableColumn<>(); 
someDoubleColumn.setCellFactory(tc -> 
    new SimpleTextCell<>(d -> String.format("%.3f", d.doubleValue()))); 

gibi şeyler yapabilirsiniz veya, her biri için varsayılan davranışı kullanmak için yeterli olmadığını,

TableColumn<Item, String> someStringColumn = new TableColumn<>(); 
TableColumn<Item, Double> someDoubleColumn = new TableColumn<>(); 

TableView<Item> table = new TableView<>(); 
table.getColumns().add(someStringColumn); 
table.getColumns().add(someDoubleColumn); 

table.getColumns().forEach(col -> col.setCellFactory(tc -> new SimpleTextCell<>())); 
+0

Thanx @James_D ama nasıl türünü algılayabilir çalışma zamanında ikinci parametre, tablo görünümünde tüm sütunlar için bir for döngüsü yazmak ve bunları aynı TableCell, TableColumn someStringColumn = new TableColumn <>(); someStringColumn.setCellFactory (tc -> yeni SimpleTextCell <Öğe, Dize>()); UpdateItem yöntemini – ManKeer

+0

içinde String DataType kullanıyorum nasıl algılayabilir Yazım sınaması nedeniyle çalışma zamanında tablo sütununun parametrized türünü dinamik olarak denetleyemezsiniz. Burada yapmak istediğiniz şey tam olarak belli değil: Farklı tablo sütun türleri için farklı davranışlar istiyorsanız, o zaman gerçekten aynı tablo hücresi uygulamasını kullanmıyorsunuz. (Tabii ki, 'updateItem()' metodunun içinde 'instanceof' testlerini yapabilirdiniz, fakat oldukça çirkin olurdu.' Sütunu oluştururken muhtemelen tablo sütun tipini bildiğiniz için, neden hücre fabrikasını kaydettirmiyorsunuz? sonra? –

+0

Anladım, bu açıklama için teşekkürler. – ManKeer

İlgili konular