2011-09-10 14 views
8

क्या कोई सेलटेबल पंक्ति की पृष्ठभूमि को स्थापित करने में मेरी सहायता कर सकता है, कृपया मैं इसे करने के लिए पूरी रात कोशिश कर रहा हूं और असफल रहता हूं और यह मुझे पागल चला रहा है। मैंने setRowStyles() पर कॉल का उपयोग करने का प्रयास किया है, लेकिन काम नहीं कर रहा है और मैंने पढ़ा है कि एक शैली सेट होने के बाद आप शैली को सेलटेबल के लिए नहीं बदल सकते - डिफ़ॉल्ट एक सेट है । फिर मैंने अपने इंटरफ़ेस सेलटेबल स्रोतों के साथ एक सेलटेबल बनाने का प्रयास किया जैसा कि इस सटीक विषय पर एक पोस्ट पर देखा गया है लेकिन ने मुझे unobfuscated ccs तत्वों के बारे में त्रुटि संदेश दिए .... जो मेरे css को obfuscated नहीं किया जा रहा है एक स्पष्ट त्रुटि संदेश है। अब मुझे नहीं पता कि क्या प्रयास करना है और मैं आधिकारिक तौर पर स्टक हूं।सेलटेबल्स और सीएसएस (जीडब्ल्यूटी)

मैं इस @ बाहरी के बारे में पढ़ रहा हूं और यह मदद नहीं कर रहा था ... यह भी सुनिश्चित नहीं है कि बाहरी बिट कहां जाना है ... मुझे लगता है कि सीएसएस में लगता है लेकिन सामान्य रूप से जब मैं अटक गया मैं कुछ भी कोशिश कर रहा हूँ!

TonyK

उत्तर

13

मुझे पता है कि यह कैसे निराशा हो सकती है, मैं एक ही स्थान पर किया गया है। मैंने उन सभी चरणों को शामिल किया है जिन्हें मैंने यह काम करने के लिए उपयोग किया था। लेकिन ऐसा लगता है कि आप लगभग वहां हैं, इसलिए आपको शायद इन सभी की आवश्यकता नहीं होगी।

आप अपने खुद के सीएसएस वर्ग नामों का उपयोग करने के लिए आप com.google.gwt.user.cellview.client.CellTable.Resources को लागू करने और CellTable निर्माता करने के लिए अपने वर्ग का एक उदाहरण से गुजरना होगा उल्लेख किया है।

CellTable घोषणा

CellTable<MyData> myCellTable = new CellTable<MyData>(10, MyResources.INSTANCE); 

संसाधन के कार्यान्वयन भी का एक उदाहरण की आवश्यकता है com.google.gwt.resources.client.ImageResource और com.google.gwt.user.cellview.client .CellTable.Style, कक्षा जो आपके सीएसएस कक्षा के नाम प्रदान करेगी। यहां चीजों को सरल बनाने के लिए संसाधन, छवि संसाधन, और शैली के स्टब कार्यान्वयन हैं जो कुछ भी नहीं करते हैं लेकिन स्टाइल नाम के रूप में स्ट्रिंग प्रदान करते हैं। अंत में ये क्लाइंटबंडल से आ सकते हैं लेकिन यह एक आवश्यकता नहीं है।

शैली स्टब (स्ट्रिंग literals का उपयोग करना)

import com.google.gwt.user.cellview.client.CellTable.Style; 

public class MyStyle implements Style { 

    public static final MyStyle INSTANCE = new MyStyle(); 

    @Override public boolean ensureInjected() { 

     return false; 
    } 

    @Override public String cellTableCell() { 

     return "myCssClassName"; 
    } 

    @Override public String cellTableEvenRow() { 

     return "myCssClassName"; 
    } 

    @Override public String cellTableEvenRowCell() { 

     return "myCssClassName"; 
    } 

    @Override public String cellTableOddRow() { 

     return "myCssClassName"; 
    } 

    @Override public String cellTableOddRowCell() { 

     return "myCssClassName"; 
    } 

    @Override public String cellTableFirstColumn() { 

     return "myCssClassName"; 
    } 

    @Override public String cellTableFirstColumnFooter() { 

     return "myCssClassName"; 
    } 

    @Override public String cellTableFirstColumnHeader() { 

     return "myCssClassName"; 
    } 

    @Override public String cellTableFooter() { 

     return "myCssClassName"; 
    } 

    @Override public String cellTableHeader() { 

     return "myCssClassName"; 
    } 

    @Override public String cellTableHoveredRow() { 

     return "myCssClassName"; 
    } 

    @Override public String cellTableHoveredRowCell() { 

     return "myCssClassName"; 
    } 

    @Override public String cellTableKeyboardSelectedCell() { 

     return "myCssClassName"; 
    } 

    @Override public String cellTableKeyboardSelectedRow() { 

     return "myCssClassName"; 
    } 

    @Override public String cellTableKeyboardSelectedRowCell() { 

     return "myCssClassName"; 
    } 

    @Override public String cellTableLastColumn() { 

     return "myCssClassName"; 
    } 

    @Override public String cellTableLastColumnFooter() { 

     return "myCssClassName"; 
    } 

    @Override public String cellTableLastColumnHeader() { 

     return "myCssClassName"; 
    } 

    @Override public String cellTableLoading() { 

     return "myCssClassName"; 
    } 

    @Override public String cellTableSelectedRow() { 

     return "myCssClassName"; 
    } 

    @Override public String cellTableSelectedRowCell() { 

     return "myCssClassName"; 
    } 

    @Override public String cellTableSortableHeader() { 

     return "myCssClassName"; 
    } 

    @Override public String cellTableSortedHeaderAscending() { 

     return "myCssClassName"; 
    } 

    @Override public String cellTableSortedHeaderDescending() { 

     return "myCssClassName"; 
    } 

    @Override public String cellTableWidget() { 

     return "myCssClassName"; 
    } 

    @Override public String getName() { 

     return "myCssClassName"; 
    } 

    @Override public String getText() { 

     return "myCssClassName"; 
    } 
} 

ImageResource स्टब

import com.google.gwt.resources.client.ImageResource; 

class MyImageResource implements ImageResource { 

    public static final MyImageResource INSTANCE = new MyImageResource(); 

    @Override public int getHeight() { 

     return 0; 
    } 

    @Override public int getLeft() { 

     return 0; 
    } 

    @Override public String getName() { 

     return ""; 
    } 

    @Override public int getTop() { 

     return 0; 
    } 

    @Override public String getURL() { 

     return ""; 
    } 

    @Override public int getWidth() { 

     return 0; 
    } 

    @Override public boolean isAnimated() { 

     return false; 
    } 
} 

संसाधन स्टब

import com.google.gwt.resources.client.ImageResource; 
import com.google.gwt.user.cellview.client.CellTable.Resources; 
import com.google.gwt.user.cellview.client.CellTable.Style; 

public class MyResources implements Resources { 

    public static final MyResources INSTANCE = new MyResources(); 

    @Override public ImageResource cellTableFooterBackground() { 

     return MyImageResource.INSTANCE; 
    } 

    @Override public ImageResource cellTableHeaderBackground() { 

     return MyImageResource.INSTANCE; 
    } 

    @Override public ImageResource cellTableLoading() { 

     return MyImageResource.INSTANCE; 
    } 

    @Override public ImageResource cellTableSelectedBackground() { 

     return MyImageResource.INSTANCE; 
    } 

    @Override public ImageResource cellTableSortAscending() { 

     return MyImageResource.INSTANCE; 
    } 

    @Override public ImageResource cellTableSortDescending() { 

     return MyImageResource.INSTANCE; 
    } 

    @Override public Style cellTableStyle() { 

     return MyStyle.INSTANCE; 
    } 
} 

तो, इस बिंदु पर आपके पास कोई सेल टैबलेट रस नहीं होना चाहिए और आपको ब्राउजर में अपने सेलटेबल तत्व का निरीक्षण करने में सक्षम होना चाहिए और मेरे CssClassName को सर्वव्यापी सीएसएस क्लास नाम के रूप में देखना चाहिए, जो बिना किसी परेशानी के है।

यदि इस बिंदु पर आप पारंपरिक तरीकों में से एक का उपयोग करके स्टाइल शीट से लिंक करते हैं तो आपको अपनी विशिष्ट स्टाइल शीट के अनुरूप "myCssClassName" स्ट्रिंग्स सेट करने में सक्षम होना चाहिए।

स्टाइल शीट लिंक

<link href="myStyleSheet.css" rel="stylesheet" type="text/css"> 

अब, अगर आप ClientBundle का उपयोग कर अपने शैलियों इंजेक्षन करना चाहते हैं तो आपको कुछ अतिरिक्त कदम है।

सबसे पहले, सुनिश्चित करें कि आप किसी भी समय अपनी स्टाइल शीट इंजेक्शन कर रहे हैं; यह भूलना आसान है। आपके मॉड्यूल के एंट्रीपॉइंट में एक साधारण स्थान है जिस तरह से आप सुनिश्चित कर सकते हैं कि इसे कॉल किया जा रहा है।

CssResource इंजेक्शन

MyClientBundle.INSTANCE.myCssResource().ensureInjected(); 

अंत में अपने CssResource का उपयोग पहले से शैली कार्यान्वयन के लिए नाम प्रदान करते हैं। चाहे सीएसएस वर्ग के नामों को अपवित्र किया जा रहा हो या नहीं, उन्हें इंजेक्शन दिया जाना चाहिए और इस तरह सही नाम का उपयोग करना चाहिए।

ClientBundle स्टब

import com.google.gwt.core.client.GWT; 
import com.google.gwt.resources.client.ClientBundle; 

public interface MyClientBundle extends ClientBundle { 

    public static final MyClientBundle INSTANCE = GWT.<MyClientBundle>create(MyClientBundle.class); 

    @Override @Source("path/to/myStyleSheet.css") MyCssResource myCssResource(); 
} 

CssResource स्टब

import com.google.gwt.resources.client.CssResource; 

public interface MyCssResource extends CssResource { 

    @ClassName("myCssClassName") String myCssClassName(); 

    @ClassName("myOtherName") String myOtherCssClassName(); 
} 

स्टाइल शीट स्टब

.myCssClassName { 
    background-color: magenta; 
    /* Yes, you will see when it is working. */ 
} 

@external .myOtherName { 
    background-color: yellow; 
} 

शैली स्टब (ClientBundle का उपयोग करना)

import com.google.gwt.user.cellview.client.CellTable.Style; 

public class MyStyle implements Style { 

    public static final MyStyle INSTANCE = new MyStyle(); 

    @Override public boolean ensureInjected() { 

     return false; 
    } 

    @Override public String cellTableCell() { 

     return MyCssResource.INSTANCE.myCssClassName(); 
    } 

    @Override public String cellTableEvenRow() { 

     return MyCssResource.INSTANCE.myCssClassName(); 
    } 

    @Override public String cellTableEvenRowCell() { 

     return MyCssResource.INSTANCE.myCssClassName(); 
    } 

    @Override public String cellTableOddRow() { 

     return MyCssResource.INSTANCE.myCssClassName(); 
    } 

    @Override public String cellTableOddRowCell() { 

     return MyCssResource.INSTANCE.myCssClassName(); 
    } 

    @Override public String cellTableFirstColumn() { 

     return MyCssResource.INSTANCE.myCssClassName(); 
    } 

    @Override public String cellTableFirstColumnFooter() { 

     return MyCssResource.INSTANCE.myCssClassName(); 
    } 

    @Override public String cellTableFirstColumnHeader() { 

     return MyCssResource.INSTANCE.myCssClassName(); 
    } 

    @Override public String cellTableFooter() { 

     return MyCssResource.INSTANCE.myCssClassName(); 
    } 

    @Override public String cellTableHeader() { 

     return MyCssResource.INSTANCE.myCssClassName(); 
    } 

    @Override public String cellTableHoveredRow() { 

     return MyCssResource.INSTANCE.myCssClassName(); 
    } 

    @Override public String cellTableHoveredRowCell() { 

     return MyCssResource.INSTANCE.myCssClassName(); 
    } 

    @Override public String cellTableKeyboardSelectedCell() { 

     return MyCssResource.INSTANCE.myCssClassName(); 
    } 

    @Override public String cellTableKeyboardSelectedRow() { 

     return MyCssResource.INSTANCE.myCssClassName(); 
    } 

    @Override public String cellTableKeyboardSelectedRowCell() { 

     return MyCssResource.INSTANCE.myCssClassName(); 
    } 

    @Override public String cellTableLastColumn() { 

     return MyCssResource.INSTANCE.myCssClassName(); 
    } 

    @Override public String cellTableLastColumnFooter() { 

     return MyCssResource.INSTANCE.myCssClassName(); 
    } 

    @Override public String cellTableLastColumnHeader() { 

     return MyCssResource.INSTANCE.myCssClassName(); 
    } 

    @Override public String cellTableLoading() { 

     return MyCssResource.INSTANCE.myCssClassName(); 
    } 

    @Override public String cellTableSelectedRow() { 

     return MyCssResource.INSTANCE.myCssClassName(); 
    } 

    @Override public String cellTableSelectedRowCell() { 

     return MyCssResource.INSTANCE.myCssClassName(); 
    } 

    @Override public String cellTableSortableHeader() { 

     return MyCssResource.INSTANCE.myCssClassName(); 
    } 

    @Override public String cellTableSortedHeaderAscending() { 

     return MyCssResource.INSTANCE.myCssClassName(); 
    } 

    @Override public String cellTableSortedHeaderDescending() { 

     return MyCssResource.INSTANCE.myCssClassName(); 
    } 

    @Override public String cellTableWidget() { 

     return MyCssResource.INSTANCE.myCssClassName(); 
    } 

    @Override public String getName() { 

     return MyCssResource.INSTANCE.myCssClassName(); 
    } 

    @Override public String getText() { 

     return MyCssResource.INSTANCE.myCssClassName(); 
    } 
} 

यह होना चाहिए कि। मुझे यकीन है कि एक ही काम करने के अन्य तरीके हैं लेकिन इसने अब तक मेरे लिए अच्छा काम किया है। शुभकामनाएं और मुझे आशा है कि यह आपको कुछ समय बचाएगा।

+3

क्या एक शानदार जवाब है। पर्याप्त केली धन्यवाद नहीं कर सकता। अब मेरे पास अपने कार्य का भाग 1 पूरा हो गया है, मैं एक और अधिक सरल दृष्टिकोण से दूर हो गया जिसने मुझे अंततः जीडब्ल्यूटी सेलटेबल के लिए अपने स्वयं के सीएसएस नियमों का उपयोग करने की अनुमति दी है! समाधान मैं इस्तेमाल किया यहाँ उल्लिखित है: http://groups.google.com/group/google-web-toolkit/browse_thread/thread/9ab3911a8d981864/ मेरी दूसरी कार्य भी अब विस्तृत वहाँ अभी भी सेटिंग के बारे में है, एक सेलटेबल पर यह पृष्ठभूमि लेकिन थोड़ा आगे :) –

+0

यह सुनकर अच्छा लगा कि आप इसे काम कर रहे हैं। मुझे लगता है कि सिर्फ यह जानकर कि एक समाधान मौजूद है, जब मैं अटक गया हूं तो मुझे फिर से रोलिंग मिलती है। –

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