के साथ जावाएफएक्स कस्टम सेल फैक्टरी कस्टम की एक सूची के आधार पर कस्टम Cell
से कस्टम ListView
बनाने का प्रयास कर रहा हूं।कस्टम ऑब्जेक्ट्स
कस्टम वस्तु वर्ग के नाम Message
कहा जाता है (पढ़ें, आदि भेजा गया) जो संदेश सामग्री, प्राप्तकर्ता, टाइमस्टैम्प और स्थिति के लिए कुछ क्षेत्रों शामिल हैं।
इस सवाल को देखने के बाद: Customize ListView in JavaFX with FXML मैं सफलतापूर्वक:
- कस्टम कोशिकाओं जहां सेल डिजाइन एक FXML फ़ाइल में परिभाषित किया गया है के साथ एक ListView बनाया;
- नियंत्रक से जुड़ा हुआ है ताकि प्रत्येक सेल डेटा संग्रह के वर्तमान आइटम से भरा जा सके;
हालांकि, मैं दोनों लिंक करने में विफल: मैं इतना है कि ListView की वर्तमान आइटम सेल नियंत्रक भेज दिया जाता है के लिए एक रास्ता खोजने के लिए प्रतीत नहीं कर सकते हैं।
final ObservableList observableList = FXCollections.observableArrayList();
observableList.setAll(myMessages); //assume myMessage is a ArrayList<Message>
conversation.setItems(observableList); //the listview
conversation.setCellFactory(new Callback<ListView<Message>, ListCell<Message>>() {
@Override
public ConversationCell<Message> call(ListView<Message> listView) {
return new ConversationCell();
}
});
और अब, ConversationCell वर्ग:
यहाँ सेल कारखाने और मदों की ListView भरने के लिए मेरे कोड है
public final class ConversationCell<Message> extends ListCell<Message> {
@Override
protected void updateItem(Message item, boolean empty) {
super.updateItem(item, empty);
ConversationCellController ccc = new ConversationCellController(null);
setGraphic(ccc.getView());
}
}
मैं ConversationCellController नहीं दिखा सकते हैं लेकिन सभी मैं कह सकता हूँ , यह वह जगह है जहां (इसके कन्स्ट्रक्टर में) मैं FXML फ़ाइल लोड करता हूं जो सेल को डिज़ाइन करता है और फिर मैं दिए गए संदेश आइटम के साथ मानों को भर सकता हूं।
getView()
विधि जड़ फलक है कि अब से भरे और डिज़ाइन किया गया कक्ष है देता है।
मैं पहले का कहना है के रूप में, डिजाइन काम है, लेकिन मैं
क्योंकि विधि में CellFactory साथ ListView आइटम लिंक करने के लिए नहीं कर पा रहेसंरक्षित शून्य updateItem (संदेश आइटम, बूलियन खाली)
खालीसच पर सेट है और आइटम वास्तव में अशक्त है।
यह काम करने के लिए मैं क्या कर सकता हूं?
'सभी उदाहरणों पर सही पर सेट किया empty' है? एक सेल को खाली माना जाता है यदि उसके पास कोई वस्तु नहीं है, यानी - यह वास्तविक कोशिकाओं के नीचे की जगह को भरने के लिए है। यदि आपकी सूची दृश्य 10 आइटम दिखाने के लिए काफी बड़ा है लेकिन आपके पास केवल 3 है, तो आपके पास 7 'वार्तालापसेल' ऑब्जेक्ट्स खाली होंगी जो खाली हैं। एक तरफ के रूप में, मैं नहीं देख सकता कि 'वार्तालापसेल नियंत्रक' को आइटम कहां से प्राप्त करना चाहिए। आप अभी भी कुछ आप हो रही है वास्तविक डेटा के साथ कोशिकाओं पर 'खाली = TRUE' यदि आप एक कम से कम उदाहरण इस समस्या का प्रदर्शन के साथ आ सकता है यह मददगार हो सकता है कर रहे हैं। – Itai
मैं 'ListView' कार्यान्वयन शुरू में पर्याप्त कोशिकाओं बनाता प्रदर्शन को भरने के लिए और कॉल' updateItem (शून्य, true) लगता है, 'उन सभी पर है, तो कहता है' updateItem (...) 'गैर खाली वालों पर, साथ उचित डेटा (हालांकि मैं निश्चित नहीं हूं, और अभी स्रोत स्रोत के माध्यम से खोदने का समय नहीं है)। किसी भी दर पर, सभी सेल कार्यान्वयन को खाली सेल केस को संभालना चाहिए। –
"मैं वार्तालापसेल नियंत्रक नहीं दिखा सकता" क्यों नहीं? –