2011-06-28 71 views
0

我正在編輯可彎曲。當單擊單元格時,它會變成該特定單元格內的文本框。文本框包含被單擊的原始單元格的文本。由於「addFocustListener」函數已被棄用,我應該使用哪些函數將輸入到文本框中的新文本複製到flextable中。GWT - flextable - 添加焦點收聽器

以下是我的代碼:

package testproject3.client; 

import java.util.ArrayList; 

import com.google.gwt.core.client.GWT; 
import com.google.gwt.event.dom.client.ChangeEvent; 
import com.google.gwt.event.dom.client.ChangeHandler; 
import com.google.gwt.event.dom.client.ClickEvent; 
import com.google.gwt.event.dom.client.ClickHandler; 
import com.google.gwt.event.dom.client.FocusEvent; 
import com.google.gwt.event.dom.client.FocusHandler; 
import com.google.gwt.event.dom.client.KeyCodes; 
import com.google.gwt.event.dom.client.KeyPressEvent; 
import com.google.gwt.event.dom.client.KeyPressHandler; 
import com.google.gwt.user.client.Command; 
import com.google.gwt.user.client.DeferredCommand; 
import com.google.gwt.user.client.rpc.AsyncCallback; 
import com.google.gwt.user.client.ui.FlexTable; 
import com.google.gwt.user.client.ui.FocusListenerAdapter; 
import com.google.gwt.user.client.ui.TextBox; 
import com.google.gwt.user.client.ui.VerticalPanel; 
import com.google.gwt.user.client.ui.Widget; 

public class ViewAndEditCompWidget 
{ 
    VerticalPanel vPanel=null; 
    FlexTable table =null; 



    public VerticalPanel getvPanel() 
    { 
     table = new FlexTable(); 
     vPanel = new VerticalPanel(); 

     table.setText(0, 0, " Name"); 
     table.setText(0, 1, " Address aasdfasfasfdasfasfdasfasdfasfasdfasfsafasdfsadfsdfasfsdfasdfsafasdfasdfasdf");   

     table.setText(1, 0, " My Name"); 
     table.setText(1, 1, " 123456789 asfasdfasfdddddddddddddddddddddddddddd"); 

     makeTableEditable(); 
     vPanel.add(table); 
     return vPanel; 
    } 
    public void makeTableEditable() 
    { 
     table.addClickHandler(new ClickHandler() 
     { 
      @SuppressWarnings("deprecation") 
      @Override 
      public void onClick(ClickEvent event) 
      { 
       final int cellIndex = table.getCellForEvent(event).getCellIndex(); 
       final int rowIndex = table.getCellForEvent(event).getRowIndex(); 

       //Cell cell = myTable.getCellForEvent(event); 
       //int receiverRowIndex = cell.getRowIndex(); 

       //make sure that it is not the header row 
       if(rowIndex != 0) 
       { 
        //make a new Textbox 
        final TextBox textBox = new TextBox(); 
        textBox.setText(table.getText(rowIndex, cellIndex)); 
        table.setWidget(rowIndex, cellIndex, textBox); 

        /********************************************* 
        DeferredComman is deprecated 
        *********************************************/ 
        DeferredCommand.addCommand(new Command() 
        { 
         @Override 
         public void execute() 
         { 
          textBox.setFocus(true); 
          textBox.selectAll(); 

         } 

        } 
        ); 

        /********************************************* 
        addFocusListener is also deprecated 
        *********************************************/ 
        textBox.addFocusListener(new FocusListenerAdapter() 
        { 
         public void onLostFocus(Widget sender) 
         { 
          table.setText(rowIndex, cellIndex, textBox.getText()); 
         } 
        } 
        ); 

        //add a keyboard listener to the text box 
        //so that it reacts to enter and ESC key 
        textBox.addKeyPressHandler(new KeyPressHandler() 
        { 
         @Override 
         public void onKeyPress(KeyPressEvent event) 
         { 
          //if key pressed was ENTER, copy the text box's text into the table 
          if (event.getCharCode() == KeyCodes.KEY_ENTER) 
          { 
           table.setText(rowIndex, cellIndex, table.getText(rowIndex, cellIndex)); 
          } 
          else if (event.getCharCode() == KeyCodes.KEY_ESCAPE) 
          { 
           table.setText(rowIndex, cellIndex, textBox.getText()+""); 
          } 
         }//onKeyPress 
        });//addKeyPressHandler 
       }//if 
      } 

     }); 

    } 

} 

DeferredCommandaddFocustListener已被棄用。什麼可以在他們的地方使用?

以下是我的新代碼:自1.6

public class CellTableExample implements EntryPoint { 

    /** 
    * A simple data type that represents a contact. 
    */ 
    private static class Contact { 
    private final String address; 
    private final Date birthday; 
    private final String name; 

    public Contact(String name, Date birthday, String address) { 
     this.name = name; 
     this.birthday = birthday; 
     this.address = address; 
    } 
    } 

    /** 
    * The list of data to display. 
    */ 
    @SuppressWarnings("deprecation") 
    private static final List<Contact> CONTACTS = Arrays.asList(
     new Contact("John", new Date(80, 4, 12), "123 Abc Avenue"), 
     new Contact("Joe", new Date(85, 2, 22), "22 Lance Ln fasfasdfasfdasdfasfasdfasfasdfasfasfasdfasdfasdf"), 
     new Contact("Tom", new Date(85, 3, 22), "33 Lance Lnasdfasfdasdfffffffffffffffffff"), 
     new Contact("Jack", new Date(85, 4, 22), "44 Lance Lnsddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd")); 

    public void onModuleLoad() { 
    // Create a CellTable. 
    final CellTable<Contact> table = new CellTable<Contact>(); 
    // Display 3 rows in one page 
    table.setPageSize(3); 

    // Add a text column to show the name. 
    TextColumn<Contact> nameColumn = new TextColumn<Contact>() { 
     @Override 
     public String getValue(Contact object) { 
     return object.name; 
     } 
    }; 
    table.addColumn(nameColumn, "Name"); 

    // Add a date column to show the birthday. 
    DateCell dateCell = new DateCell(); 
    Column<Contact, Date> dateColumn = new Column<Contact, Date>(dateCell) { 
     @Override 
     public Date getValue(Contact object) { 
     return object.birthday; 
     } 
    }; 
    table.addColumn(dateColumn, "Birthday"); 

    // Add a text column to show the address. 
    TextColumn<Contact> addressColumn = new TextColumn<Contact>() { 
     @Override 
     public String getValue(Contact object) { 
     return object.address; 
     } 
    }; 
    table.addColumn(addressColumn, "Address"); 

    // Associate an async data provider to the table 
    // XXX: Use AsyncCallback in the method onRangeChanged 
    // to actaully get the data from the server side 
    AsyncDataProvider<Contact> provider = new AsyncDataProvider<Contact>() { 
     @Override 
     protected void onRangeChanged(HasData<Contact> display) { 
     int start = display.getVisibleRange().getStart(); 
     int end = start + display.getVisibleRange().getLength(); 
     end = end >= CONTACTS.size() ? CONTACTS.size() : end; 
     List<Contact> sub = CONTACTS.subList(start, end); 
     updateRowData(start, sub); 
     } 
    }; 
    provider.addDataDisplay(table); 
    provider.updateRowCount(CONTACTS.size(), true); 

    SimplePager pager = new SimplePager(); 
    pager.setDisplay(table); 

    VerticalPanel vp = new VerticalPanel(); 
    vp.add(table); 
    vp.add(pager); 

    // Add it to the root panel. 
    RootPanel.get().add(vp); 
    } 
} 

回答

0

監聽器在GWT棄用,你將不得不使用處理器來代替。你看到一個addFocusHandler嗎?

從GWT網站 - http://code.google.com/webtoolkit/doc/1.6/ReleaseNotes_1_6.html

事件處理程序已被添加到替代由小工具,歷史,以及其他各種類所使用的舊事件偵聽器。

ps - 也看看http://gwt.google.com/samples/Showcase/Showcase.html#!CwCellTable,我認爲這就是你想要實現的。

+0

感謝您的建議。可以調整位於celltable中的EditTextCell的大小嗎? – sap

+1

如果通過調整大小,你的意思是在瀏覽器上調整...然後是的。這是可能的。 – Jai

+0

瀏覽器調整大小是什麼意思?我在上面包含了我的代碼,EditTextCell區域是固定的,有時一些單元格包含大量數據,當單擊單元格時,EditTextCell不顯示所有文本。 – sap