2010-11-02 11 views
5

समस्या: मुझे परिवर्तनीय पंक्ति ऊंचाई के साथ एक एसडब्ल्यूटी टेबल (जेएफएएस टेबल व्यूअर) की आवश्यकता है। असल में, मैंने इसे अपनी विकास मशीन पर हल किया (उबंटू 10.10 चला रहा है)। दुर्भाग्य से, यह विंडोज़ पर और मैक पर काम नहीं करता है।परिवर्तनीय पंक्ति ऊंचाई के साथ एसडब्ल्यूटी तालिका: लिनक्स पर काम करना, लेकिन मैक/विंडोज

प्रारंभ में, मैंने सोचा कि मैंने पुस्तकालयों का सही ढंग से उपयोग नहीं किया है। लेकिन अब तक मुझे डर है कि मैं जो करना चाहता हूं वह विंडोज़ पर संभव नहीं है। मुझे उम्मीद है कि यहां कोई अन्य मुझे विश्वास दिलाता है।

पुन: उत्पन्न करने के लिए: यहां अपना कोड प्रदान करने के बजाय, मैंने समस्या को पुन: पेश करने के लिए एक न्यूनतम कार्यक्रम बनाया। मैं निम्नलिखित Snipplet के साथ शुरू किया:

http://git.eclipse.org/c/platform/eclipse.platform.ui.git/tree/examples/org.eclipse.jface.snippets/Eclipse%20JFace%20Snippets/org/eclipse/jface/snippets/viewers/Snippet049StyledCellLabelProvider.java

मैं संशोधित अद्यतन() विधि निर्देशिका के लिए पाठ की दो पंक्तियाँ और फ़ाइलों के लिए एक पंक्ति (चर पंक्ति ऊँचाई के साथ एक वातावरण अनुकरण करने के लिए) का उत्पादन करने के लिए:

... 
if (file.isDirectory()) { 
    cell.setText(styledString.toString() + "\n" 
     + styledString.toString()); 
    cell.setImage(IMAGE1); 
} else { 
    cell.setImage(IMAGE2); 
} 
...

यह लिनक्स पर लक्षित है, लेकिन विंडोज़ पर सभी पंक्तियों की ऊंचाई समान है। विशेष रूप से, केवल एक पंक्ति दिखाई दे रही है।

अगला, मैं माप() को अधिक बुद्धिमान बनाकर SWT की सहायता करने की कोशिश कर रहा था। इसलिए मैं उपाय() इस तरह दुबारा लिखा:

protected void measure(Event event, Object element) { 
    if (((File) element).isDirectory()) { 
     event.height = 32; 
    } else { 
     event.height = 16; 
    } 
    super.measure(event, element); 
}

परिणाम: सभी पंक्तियों ऊंचाई 32. फिर है, यह के रूप में लिनक्स पर इरादा काम करता है।

मेरा डर यह है कि विंडोज़ पर बस सभी पंक्तियां एक ही ऊंचाई होनी चाहिए। यह मेरे लिए एक शोस्टॉपर होगा। क्या कोई इस बात की पुष्टि कर सकता है, या इससे भी बेहतर, कामकाज प्रदान कर सकता है?

धन्यवाद!

+0

वास्तव में, मैं इस व्यवहार के लिए एक स्पष्टीकरण मिल गया हो सकता है, और हो सकता है एक फ़िक्स (मैं अभी भी इस बाहर की कोशिश करने के लिए है): https://bugs.eclipse.org/bugs/show_bug .cgi? id = 148039 – jastram

+0

उत्तर के लिए सभी को धन्यवाद। मैं http://sourceforge.net/projects/agilegrid/ का उपयोग करके समाप्त हुआ, जो तालिका को मूल रूप से खींचता है, जैसे केटीबल। निश्चित रूप से एसडब्ल्यूटी की तुलना में काम करना एक खुशी है। – jastram

उत्तर

2

मैं पुष्टि कर सकता हूं कि Win32 तालिका पंक्तियों पर केवल एक ही ऊंचाई हो सकती है। उदाहरण के लिए देखें this bug report। बग 148039 से कामकाज setItemHeight() सुलभ बनाता है, लेकिन यह इस प्रतिबंध को नहीं बदलता है।

4

मैं इस समस्या में भी भाग गया - एक एसडब्ल्यूटी टेबल विजेट की आवश्यकता है जो विभिन्न ऊंचाइयों की कोशिकाओं का समर्थन कर सके। जैसा कि डकमैन कहते हैं, Win32 टेबल पंक्तियां यह नहीं कर सकती हैं। हम केटीबल विजेट का उपयोग कर समाप्त हो गया। यह देशी ओएस टेबल का उपयोग नहीं करता है।

http://sourceforge.net/projects/ktable/

यह हमारे लिए ठीक काम किया, लेकिन यह कुछ quirks मिला है। सौभाग्य से स्रोत कोड आपकी आवश्यकताओं के अनुरूप संशोधित करना काफी आसान है।

+0

यह वास्तव में दिलचस्प लग रहा है।अगर मैंने अभी तक AgileGrid के साथ दोबारा प्रतिक्रिया नहीं की है, तो मैं Ktable को आज़मा दूंगा। – jastram

1

हम नेबुला ग्रिड विजेट का उपयोग करते हैं। http://www.eclipse.org/nebula/widgets/grid/grid.php

यह असाधारण रूप से लचीला है। हमारे मामले में हम इसे एक वृक्ष दृश्य तालिका कार्यक्षमता के साथ संयुक्त रूप से HTML शैली तालिका कार्यक्षमता प्राप्त करने के लिए उपयोग करते हैं।

स्क्रीनशॉट alt text

+0

क्या आप वाकई इस मुद्दे को संबोधित करते हैं कि नेबुला? मेरा मानना ​​है कि मैंने इसे जांच लिया और इसे खारिज कर दिया। मुझे यकीन नहीं है कि मौसम मैंने इसे खारिज कर दिया क्योंकि यह अल्फा में था, या क्योंकि इसकी ऊंचाई ऊंचाई सीमा भी थी। लेकिन मुझे लगता है * यह पंक्ति ऊंचाई के मुद्दों के कारण भी था। – jastram

+0

परिवर्तनीय ऊंचाई प्राप्त करने के लिए बॉक्स से पूरी तरह से बाहर नहीं है लेकिन यह बहुत सीधी है। ग्रिड में प्रत्येक पंक्ति की अपनी स्वतंत्र ऊंचाई विशेषता होती है। तो जहां एक सामान्य टेबल विजेट में पेंट/माप के रूप में आप ऊंचाई समायोजित कर सकते हैं लेकिन सभी टेबलिटैम अब ग्रिड में अधिकतम ऊंचाई हैं, आप प्रत्येक GridItem.setHeight() को समायोजित कर सकते हैं। मेरे मामले में मैं ग्रिड टेबल व्यूअर का उपयोग कर रहा हूं और मेरे लेबल प्रदाता अद्यतन विधि को प्रत्येक पंक्ति के लिए उचित ऊंचाई की गणना कर रहा हूं। यह बीटा है लेकिन पिछले 2+ सालों से हमारे लिए बहुत स्थिर रहा है। – fisherja