यदि आप अपने टेबल कॉलम की सॉर्टिंग क्षमताओं को संरक्षित करना चाहते हैं, तो ऊपर दिए गए कोई भी समाधान मान्य नहीं है: यदि आप अपनी तिथि को स्ट्रिंग में कनवर्ट करते हैं और इसे अपने टेबल व्यू में दिखाते हैं; तालिका इसे इस प्रकार (गलत तरीके से) क्रमबद्ध करेगी।
जो समाधान मैंने पाया वह टूस्टिंग() विधि को ओवरराइड करने के लिए तिथि वर्ग को उप-वर्गीकृत कर रहा था। यद्यपि यहां एक चेतावनी है: TableView java.sutil.Date के बजाय java.sql.Date का उपयोग करता है; तो आपको पूर्व को उप-वर्ग करने की आवश्यकता है।
import java.text.SimpleDateFormat;
public class CustomDate extends java.sql.Date {
public CustomDate(long date) {
super(date);
}
@Override
public String toString() {
return new SimpleDateFormat("dd/MM/yyyy").format(this);
}
}
तालिका उस तारीख को मुद्रित करने के लिए उस विधि को कॉल करेगी।
बेशक, आप भी नई उपवर्ग को TableColumn घोषणा में अपने दिनांक वर्ग को बदलने की जरूरत:
@FXML
TableColumn<MyObject, CustomDate> myDateColumn;
यही बात है जब आप अपने तालिका के स्तंभ के लिए अपने ऑब्जेक्ट विशेषता देते हैं:
myDateColumn.setCellValueFactory(new PropertyValueFactory< MyObject, CustomDate>("myDateAttr"));
और अंत में, स्पष्टता के शेक के लिए यह है कि कैसे आप अपने वस्तु वर्ग में गेटर घोषित:
public CustomDate getMyDateAttr() {
return new CustomDate(myDateAttr.getTime()); //myDateAttr is a java.util.Date
}
इस तथ्य के कारण मुझे यह पता लगाने में थोड़ी देर लग गई कि यह दृश्यों के पीछे java.sql.Date का उपयोग करता है; तो उम्मीद है कि यह कुछ लोगों को कुछ समय बचाएगा! जावा FX8 के लिए
यह शुरू में तालिका को आबाद करने के लिए ठीक काम करता है ... अगर मॉडल में तारीख संपत्ति बाद में SimpleStringProperty से बदल जाता है एक अधिसूचना उत्सर्जन नहीं है, और तालिका अद्यतन नहीं किया गया है। – Adam