2011-04-26 10 views
13

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

table.sinkEvents(Event.ONCLICK); 
    table.setTitle("Click me"); 
    table.setSize("600px", "600px"); 
    table.addDomHandler(new ClickHandler() 
    { 
     @Override 
     public void onClick(ClickEvent event) 
     { 
      Window.alert("You clicked!" +); 

     } 
    }, ClickEvent.getType()); 

मैं प्रत्येक पंक्ति के लिए clickEvent जोड़ने के लिए कुछ इसी तरह कर सकता हूँ?

उत्तर

27

एक सेलटेबल ने क्लिक ईवेंट को संभालने के लिए समर्थन में बनाया है। आप एक CellPreviewHandler जोड़ सकते हैं जिसे पंक्ति पर क्लिक होने पर दूसरों के बीच बुलाया जाएगा। यह घटना में कई आइटम प्राप्त होगा जैसे मूल घटना, सेल और डेटा पंक्ति मान। क्योंकि यह न केवल क्लिक ईवेंट के लिए आग लगती है, आपको यह जांचने की आवश्यकता होती है कि क्लिक ईवेंट निकाल दिया गया था या नहीं। बस पारित घटना का परीक्षण करें: boolean isClick = "click".equals(event.getNativeEvent().getType())

एक और विकल्प संरक्षित विधि doSelection का विस्तार करना है, लेकिन इसे बहिष्कृत किया गया है और आपको यह सुनिश्चित करने की ज़रूरत है कि आपके पास KeyboardSelectionPolicy सही है, यह सुनिश्चित करने के लिए सेट करें कि क्लिक कब किया जाता है। इंटरफेस के JavaDoc में उत्तरार्द्ध के लिए देखें KeyboardSelectionPolicy

+0

धन्यवाद! यह सही काम करता है। – gusper

+3

मुझे लगता है कि आपको "क्लिक" के बजाय BrowserEvents.CLICK का उपयोग करने पर विचार करना चाहिए। –

+1

'ब्राउज़र एवेन्ट्स' केवल GWT 2.5.0 –

18

एक और तरीका है एक NoSelectionModel का उपयोग कर एक सेल का चयन किया जा सकता है है और तालिका में जोड़ने के लिए:

//EDIT: this is a field, not a local variable 
TheCellObject clickedObject; //the object selected by selectionModel 

final NoSelectionModel<TheCellObject> selectionModel = new NoSelectionModel<TheCellObject>(); 

    selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() { 

       @Override 
       public void onSelectionChange(SelectionChangeEvent event) { 
        clickedObject = selectionModel.getLastSelectedObject(); 
       } 
      }); 
cellTable.setSelectionModel(selectionModel); //add selection model to your celltable 
+0

आप किसी भी आंतरिक वर्ग के अंदर 'अंतिम क्लिक' ऑब्जेक्ट का उपयोग कैसे कर सकते हैं? आप इसे कैसे बदल सकते हैं? आपका कोड गलत लगता है। – nakhli

+0

यह वही है जो मुझे चाहिए और बिल्कुल सही है! – membersound

+0

@Noya cool आपको धन्यवाद – nakhli

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