2011-06-28 13 views
0

私は編集可能なflextableで作業しています。セルをクリックすると、そのセル内のテキストボックスに変わります。テキストボックスには、クリックされた元のセルのテキストが含まれます。 "addFocustListener"関数は廃止予定ですので、テキストボックスに入力された新しいテキストをflextableにコピーするためにはどの関数を使うべきですか?とaddFocustListenerが廃止され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 
      } 

     }); 

    } 

} 

DeferredCommand:

以下は、私のコードです。彼らの場所で何が使えますか?

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

リスナーが1.6以降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

ご意見ありがとうございます。セルテーブルにあるEditTextCellのサイズを変更することは可能ですか? – sap

+1

サイズを変更すると、ブラウザのサイズが変更されたことを意味します。それは可能です。 – Jai

+0

ブラウザのサイズ変更はどういう意味ですか?私は上記のコードを含んでいますが、EditTextCellの領域は固定されていて、時には一部のセルには多くのデータが含まれています。セルがクリックされると、EditTextCellはすべてのテキストを表示しません。 – sap

関連する問題