2014-12-15 7 views
6

मैं एक साधारण प्रश्नावली आवेदन प्रोग्रामिंग कर रहा हूँ। मैं एक कस्टम JavaFX घटक (एक सवाल का प्रतिनिधित्व) के अंदर एक tableview उपयोग कर रहा हूँ, कि एक ListView (पूरे प्रश्नावली का प्रतिनिधित्व करते थे) के अंदर एक ListCell के रूप में प्रयोग किया जाता है।आकार के लिए javafx tableView आकार को कैसे सीमित करें?

मैं क्या चाहता हूं: प्रत्येक सूचीसेल जितनी संभव हो सके उतनी छोटी जगह (या आवश्यक) के रूप में उपयोग करता है जबकि अभी भी इसकी पूरी सामग्री को खराब कर देता है।

क्या होता है: तालिका दृश्य मानक आकार के लिए डिफ़ॉल्ट लगता है। यदि तालिका में अधिक सामग्री है, तो यह अपनी सामग्री को स्क्रॉलपैन के भीतर प्रदर्शित करता है। यदि टेबल व्यू में कम सामग्री है, तो यह खाली जगह के साथ खुद को भर देता है।


मैं तरीके का एक संख्या में मेरी समस्या का समाधान करने की कोशिश की:

  1. मूल रूप से मैं एक तरह से मान लिया है स्क्रॉल बार निष्क्रिय होना चाहिए कि। लेकिन मुझे ऐसा करने का कोई रास्ता नहीं मिला।

  2. तब मैं PreferredSizeProperty बदलकर तालिका का आकार बदलने की कोशिश की: table.setPrefHeight() लेकिन मैं कितना बड़ा टेबल है पर कोई जानकारी नहीं मिल रहा। table.setPrefHeight(USE_COMPUTED_SIZE); का नतीजा नहीं था जिसके परिणामस्वरूप मैं उम्मीद कर रहा था।

  3. तो मैं आवश्यक ऊंचाई अपने आप की गणना करने की कोशिश की, लेकिन मैं अलग-अलग पंक्तियों की ऊंचाई निर्धारित करने के लिए किसी भी तरह से नहीं मिल सका। कस्टम टेबलसेल के अद्यतन विधि के भीतर this.getTableRow().getHeight() पर कॉल करने से न्यूलपॉन्टर अपवादों का परिणाम होगा। जब शून्य के खिलाफ चेक किया गया, तो यह अभी भी 0 वापस आ जाएगा! TableRow<T> tr = this.getTableRow(); if (tr != null) { System.out.println(tr.getHeight()); }

  4. काफी निराश, मैं table.setFixedCellSize(20); यह severly कस्टम tablecells की बात की सीमा को फोन करके, पंक्ति ऊंचाई तय करने का फैसला किया है, लेकिन मैं फिर किसी भी प्रगति कर नहीं किया गया था। हालांकि, तालिका ऊंचाई भी एक निश्चित पंक्ति की ऊँचाई से गुणा लाइनों की संख्या के बराबर नहीं है, क्योंकि तालिका शीर्ष लेख को ध्यान में रखा जाना चाहिए। और मैं टेबल हेडर तक नहीं पहुंच सका या टेबल हेडर आकार/ऊंचाई के लिए पूछ सकता हूं।

आप कोई सुझाव हैं जहाँ मैं गलत हो गया था या क्या मैं अनदेखा कर दिया (अपने मूल लक्ष्य को प्राप्त करने के लिए एक ListCell कि है preciesly के रूप में मेज के प्रत्येक पंक्ति प्रदर्शित करने के लिए बड़ा एक आवश्यक के रूप में करने के बाद करते हैं, लेकिन एक भी नहीं खाली रेखा?) किसी भी मदद/विचारों का स्वागत किया जाएगा! धन्यवाद!

+0

तो आपने इसे एक साथ क्रैक किया है: ListView -> ListCell -> TableView? यह कई स्तरों पर गलत है .. मुझे नहीं पता कि कहां से शुरू करना है। मैं दृढ़ता से आपको विभिन्न घटकों के साथ यूआई को फिर से लिखने की सलाह देता हूं। ListView और TableView दोनों बड़ी मात्रा में डेटा प्रदर्शित करने के लिए हैं और इस प्रकार वर्चुअलाइज्ड तरीके से अपने बच्चों (कोशिकाओं) को लेआउट करते हैं। यह एक प्रश्नपत्र को एक सूची दृश्य ग्राफिक के रूप में प्रदर्शित करने के लिए नहीं है। – eckig

+0

एक प्रश्न एक कस्टम घटक द्वारा दमन किया जाता है जो टेबलव्यू को सबकंपोनेंट के रूप में उपयोग करता है। प्रत्येक प्रश्न स्वयं सूची सूची में प्रदर्शित होने के लिए एक सूचीसेल है। तालिका दृश्य मेरे मामले में बड़ा नहीं है: इसमें 1 से 10 लाइनों में कुछ भी हो सकता है। मैं सहमत हूं: एक पंक्ति के लिए यह कुछ हद तक व्यर्थ लगता है, लेकिन यदि कई लाइनों की आवश्यकता है, तो मुझे अभी तक यह नहीं पता कि इसमें क्या गलत है। – thorwinn

+0

जो आप करना चाहते हैं वह बहुत मुश्किल हो रहा है (यदि यह भी संभव है)। लेआउट के लिए 'टेबल व्यू' का उपयोग नहीं किया जाना चाहिए, जो प्रभावी रूप से आप यहां करने की कोशिश कर रहे हैं। क्या आपको वास्तव में किसी तालिका दृश्य (आकार बदलने योग्य कॉलम, ड्रैग करने योग्य कॉलम, हेडर क्लिक पर सॉर्टिंग इत्यादि) की किसी भी कार्यक्षमता की आवश्यकता है? यदि नहीं, तो 'टेबल व्यू' के बजाय सेल को प्रदर्शित करने के लिए लेआउट फलक (उदा। 'ग्रिडपेन') का उपयोग करना बेहतर हो सकता है। –

उत्तर

0

पर एक नज़र डालें:

tableView.setColumnResizePolicy(..); 

हो सकता है कि यह आप बाइंडिंग के उपयोग के साथ

1

मदद कर सकते हैं (उदाहरण के 2 पंक्तियाँ की एक न्यूनतम, या एक मेज सभी के आकार के साथ एक मेज दृश्य है एक श्रोता या तालिका तालिका आकार हमेशा आइटम को समायोजित करेगा खिला सूची पर सदस्यता के साथ सूची में आइटम्स ...

/** 
* Helper to set table height based on content 
* 
* @param table  - the table in context 
* @param rowHeight - the height of a single row, alternatively could use table.fixedCellSizeProperty() 
* @param headerHeight - the height of the table header 
* @param margin  - a value for the margins 
*/ 
public void tableHeightHelper(TableView<?> table, int rowHeight, int headerHeight, int margin) { 
    table.prefHeightProperty().bind(Bindings.max(2, Bindings.size(table.getItems())) 
              .multiply(rowHeight) 
              .add(headerHeight) 
              .add(margin)); 
    table.minHeightProperty().bind(table.prefHeightProperty()); 
    table.maxHeightProperty().bind(table.prefHeightProperty()); 
} 

यह वास्तव में कैसे आप सूची दृश्य के लिए कोशिकाओं को अनुकूलित कर रहे हैं पर निर्भर करता है, और कैसे आप सेल कारखाने कॉन्फ़िगर कर दिया है ...जब तक ListView में fixedCellProperty() सेट नहीं किया जाता है, तब तक मुझे व्यक्तिगत सेल के साथ किसी सूची दृश्य में समायोजित नोड्स के आकार में समायोजन नहीं होता है।

+0

कॉल कब होगा यह समारोह होता है और क्यों? – npskirk

संबंधित मुद्दे