2016-03-20 10 views
0

Bu, JavaFx üzerinde ilk defa çalışıyorum ve şu eğitimi bir şablon olarak izliyorum: http://code.makery.ch/library/javafx-8-tutorial/part3/.JavaFx: Biçimlendirme Tablosu Sütun Verisi

Uygulamam için sol tarafta 2 sütun, telefon numarası ve çağrı başlangıç ​​tarihi/saati ile çalışıyorum. Şu anda tablodaki formatın yyyy-MM-ddThh: mm olarak geldiği formatı değiştirmek istiyorum.

Biçimlendirme parçasının nereye yerleştirileceğini anlayamıyorum. Yukarıdaki bağlantıda bulabileceğiniz bir tarih biçimlendirme işlevim var, ancak bir dizeyi döndürüyor ve bana hata veriyor. Verebileceğiniz herhangi bir yardım için teşekkürler. Çalıştığım şeyin bazı kod parçacıkları.

Denetleyici:

@FXML 
private void initialize() { 
    // Initialize the person table with the two columns. 
    billingNumberColumn.setCellValueFactory(cellData -> cellData.getValue().billingNumberProperty()); 
    callStartColumn.setCellValueFactory(cellData -> cellData.getValue().callStartProperty()); 
} 

Modeli:

public LocalDateTime getCallStart() { 
    return callStart.get(); 
} 

public void setCallStart(LocalDateTime callStart) { 
    this.callStart.set(callStart); 
} 

public ObjectProperty<LocalDateTime> callStartProperty() { 
    return callStart; 
} 

Tarih Biçimi:

public static String format(ObjectProperty<LocalDateTime> callStart) { 
    if (callStart == null) { 
     return null; 
    } 
    return DATE_FORMATTER.format((TemporalAccessor) callStart); 
} 

cevap

0

belirtin kolon

TableColumn<Person, LocalDateTime> column = new TableColumn<>("Birth"); 

Bunun için kod oldukça karmaşık ve gerçekten iyi değil.

boş durumda ya da hiç veri hücresi

column.setCellFactory(
       new Callback<TableColumn<Person, LocalDateTime>, TableCell<Person, LocalDateTime>>() { 

        @Override 
        public TableCell<Person, LocalDateTime> call(TableColumn<Person, LocalDateTime> param 
        ) { 
         return new TableCell<Person, LocalDateTime>() { 

          @Override 
          protected void updateItem(LocalDateTime item, boolean empty) { 
           super.updateItem(item, empty); 
           if (item == null || empty) { 
            setText(null); 
            setStyle(""); 
           } else { 
            //FORMAT HERE AND CALL setText() with formatted date string 



           } 
          } 

         }; 
        } 
       } 
     ); 
+0

"Kod bu arıyorum gerçek iyi oldukça karmaşık olup için": Bir lambda ifadesi –

+0

ile Anonim iç sınıf değiştirmek eğer çok daha az karmaşık ve çok daha iyi görünümlü @James_D Düşüncenin meselesi, ben bunu daha okunaklı sonra lambdalar almak için, burada daha iyi neler olup bittiğini görüyorsunuz.Bunu sadece benim tadım, o sadece birkaç tıklama ve IDE onun için bunu yapar netbeans ile dönüştürebilirsiniz:), tomurcuklarımdan hoşlanıyorum tomurcukları, D onlar sadece temiz ve temiz –

3

kullanın cellFactory olduğunda ele/null yo utake bakım emin olun. TextFieldTableCell, dönüştürücü verilen bir hücre fabrikası oluşturmak için bir yöntem sağlar. dönüştürücü olarak bir LocalDateTimeStringConverter kullanılabilir:

callStartColumn.setCellValueFactory(cellData -> cellData.getValue().callStartProperty()); 
callStartColumn.setCellFactory(TextFieldTableCell.forTableColumn(new LocalDateTimeStringConverter(DATE_FORMATTER, DATE_FORMATTER)));