2012-08-13 13 views
5

मैं एक कंपोजिटसेल बनाने की कोशिश कर रहा हूं जिसमें टेक्स्टसेल और बटन बटन शामिल हैं। मैं सामान्य रूप से कॉलमेट कंपेल को कॉलम में जोड़ना चाहता हूं और फिर कॉलम को सेलटेबल में जोड़ना चाहता हूं। हालांकि मैं यह समझने में सक्षम नहीं हूं कि कॉलम का उदाहरण कैसा होना चाहिए। विशेष रूप से मैं निम्नलिखित कोड में अपनी तरह पैरामीटर नहीं मिल सकता है:एक gwt अनुप्रयोग में कंपोजिट सेल

Column<FilterInfo, ?> compositeColumn = new Column<FilterInfo, ?>(createCompositeCell()) { 

    @Override 
    public Object getValue(Object object) { 
    // TODO Auto-generated method stub 
    return null; 
    }}; 

विधि है जो कस्टम वर्ग के CompositeCell बनाता FilterInfo (यह आवश्यक है?) है:

private CompositeCell<FilterInfo> createCompositeCell(){ 

HasCell<FilterInfo, String> filterName = new HasCell<FilterInfo, String>() { 

    public Cell<String> getCell() { 
    return new TextCell(); 
    } 

    public FieldUpdater<FilterInfo, String> getFieldUpdater() { 
    // TODO Auto-generated method stub 
    return null; 
    } 

    public String getValue(FilterInfo object) { 
    return object.getFilterName(); 
    }}; 

    HasCell<FilterInfo, String> filterButton = new HasCell<FilterInfo,String>(){ 

    public Cell<String> getCell() { 
     return new ButtonCell(); 
    } 

    public FieldUpdater<FilterInfo, String> getFieldUpdater() { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    public String getValue(FilterInfo object) { 
     // TODO Auto-generated method stub 
     return "..."; 
    } 
    }; 

    List<HasCell<FilterInfo, ?>> cells = new ArrayList<HasCell<FilterInfo, ?>>(); 
    cells.add(filterName); 
    cells.add(filterButton); 

    CompositeCell<FilterInfo> compositeCell = new CompositeCell<FilterInfo>(cells); 

    return compositeCell; 

}

मैं वांछित कंपोजिटसेल बनाने और इसे सेलटेबल में जोड़ने के लिए कोड या किसी अन्य सुझाव को अनुकूलित करने के किसी भी संकेत से आभारी हूं।

उत्तर

3

क्या आपको एक समग्र सेल का उपयोग करना है? मेरे लिए यह बहुत काम की तरह लगता है, और यह सिर्फ अपना खुद का कस्टम सेल बनाने के लिए बहुत आसान हो सकता है।

मैं GXT XTemplate का उपयोग करके पाठ सेल का पाठ प्रस्तुत करने के लिए द्वारा एक compositecell (Checkboxcell + TextCell) बनाया Creating Custom Cells

+0

मैं इस कोशिश की और यह कस्टम सेल के साथ किया जा सकता है। अच्छी एप्रोच। – arjacsoh

1

अपने CellTableFilterInfo की एक सूची लेता है और अपने Cell एक FilterInfo लेता है, तो एक IdentityColumn का उपयोग करें।

0

पर दस्तावेज़ीकरण का एक पढ़ा है। यदि आप शुद्ध जीडब्ल्यूटी पर चिपकना चाहते हैं और जीडब्ल्यूटी के साथ अन्य जीएफटी विजेट्स को प्रतिस्थापित करना चाहते हैं तो टेम्पलेट का उपयोग करें।

https://gist.github.com/Aadi1/4949994

2

प्रकार पैरामीटर पर यहां बहुत ज्यादा ध्यान केंद्रित करने की कोशिश मत करो। आपका आईडीई बहुत स्मार्ट है और आपको त्रुटि टाइप करेगा। यह शिकायत करेगा "कच्चा प्रकार। XXX < सी> parametrized होना चाहिए" हालांकि आप इस तरह से कोड संकलित और चलाने में सक्षम होना चाहिए।

यहाँ एक एन की CompositeCell बटन के साथ एक कॉलम के लिए एक कोड है:

private Column<DTO, DTO> getButtonColumn() { 
    return new Column<DTO, DTO>(getButtonsCell()) { 
     @Override 
     public DTO getValue(DTO object) { 
      return object; 
     } 
    }; 
} 

private CompositeCell getButtonsCell() { 
    HasCell<DTO,DTO> button1 = new AbstractActionButton<DTO>() { 
       @Override 
       public void execute(final DTO object) { 
        //Action on button click 
       } 

       @Override 
       public void render(Context context, DTO data, SafeHtmlBuilder sb) { 
        // 
       } 
      }; 
    HasCell<DTO,DTO> button2 = new AbstractActionButton<DTO>(){ 
     //Complete me ... 
    } 

    List<HasCell<DTO, ?>> cells = new LinkedList<>(); 
    cells.add(button1); 
    cells.add(button2); 
    CompositeCell<DTO> compositeCell = new CompositeCell<>(cells); 

    return compositeCell; 
} 


public abstract class AbstractActionButton<DTO> implements HasCell<DTO, DTO> { 

@Override 
public Cell<DTO> getCell() { 
    return new ActionCell<DTO>("Button title", new ActionCell.Delegate<DTO>() { 
     @Override 
     public void execute(DTO object) { 
      AbstractActionButton.this.execute(object); 
     } 
    }) { 
     @Override 
     public void render(Context context, DTO data, SafeHtmlBuilder sb) { 
      AbstractActionButton.this.render(context, data, sb); 
     } 
    }; 
} 

//Replaced by delegate but still need to be overriden 
@Override 
public FieldUpdater<DTO, DTO> getFieldUpdater() { 
    return null; 
} 

@Override 
public DTO getValue(DTO object) { 
    return object; 
} 

/** 
* You can override this method to render your button differently. Not mandatory 
* @param context 
* @param data 
* @param sb 
*/ 
public abstract void render(Context context, DTO data, SafeHtmlBuilder sb); 

/** 
* Called when the button is clicked 
* @param object 
*/ 
public abstract void execute(DTO object); 
}