0

GXT を使用したアプリがあります。このアプリには、セルの値を編集する必要があるグリッドがあります。この方法でセルを作成します。

column = new ColumnConfig();
fieldEditor = new CellEditor(new TextField<String>());
column.setEditor(fieldEditor);
column.setId("value");
column.setHeader("Value");
column.setWidth(650);
configs.add(column);

ご覧のとおり、私はTextFieldエディターとして使用しています。したがって、値を変更した後、Enter キーを押すか、ウィンドウの他の場所をクリックすることができます。これを処理する方法。イベントと MouseClick イベントを処理しようとしましButtonPressたが、これは例外をドロップするか、何もしません。

UPD:今、私は次の方法でこれを実装しようとしています:

valueEditor = new TextField<String>();
KeyListener keyListener = new KeyListener(){
    @Override
    public void componentKeyUp(ComponentEvent event){
        if (event.getKeyCode() == KeyCodes.KEY_ENTER){
        if (valueEditor.getValue() != null && !("").equals(valueEditor.getValue())){
           Window.alert("Enter Button Pressed");
           PropertyItem item;
           item = new PropertyItem(grid.getStore().getAt(rowNumber).getName(),                 
                grid.getStore().getAt(rowNumber).getType(), valueEditor.getValue(),    
                grid.getStore().getAt(rowNumber).isAccepted());
           store.update(item);
           store.commitChanges();
           saveProperties(store, customerId, toRemove);
                    }
                }
            }
        };
        valueEditor.addKeyListener(keyListener);

そして問題は何ですか:編集の最後にEnterキーを押すことは処理されませんが、編集が非アクティブ化された後にのみ処理されます。

4

1 に答える 1

0

次のコードを使用できるよりも TextField でenter イベントを処理したい場合

TextField<String> field = new TextField<String>();
KeyListener keyListener = new KeyListener(){
    @Override
    public void componentKeyUp(ComponentEvent event) {
        if(event.getKeyCode() == KeyCodes.KEY_ENTER){
            //do stuff
        }
    }
};
field.addKeyListener(keyListener);

column = new ColumnConfig();
fieldEditor = new CellEditor(field);
column.setEditor(fieldEditor);
column.setId("value");
column.setHeader("Value");
column.setWidth(650);
configs.add(column);

それが役に立たない場合は、フォーカス ロスト イベントを使用できます。それがあなたを助けることを願っています。

于 2013-06-28T13:55:00.813 に答える