0

次のようなことをしたいと思います。各セルが自分で作成したクラスであるセルテーブルが必要です。セルテーブルのクリックイベントを追加する必要があります。では、どのセルがクリックされたかを確認するにはどうすればよいですか。Cellは私が定義したクラスであるため、クリックしたセルに基づいて、何らかのアクションを実行する必要があります。クリックしたセルのオブジェクトの詳細をどうにかして取得できますか?例えば

セルテーブルのようなExcelシートが必要です。Excelシートの各セルは、私が定義したクラスです。たとえば、クラスは次のような値を保持します。

CellClass{
 boolean isempty;
 string name;
 int id;
}

ここで、Excelシートをクリックすると、クリックされたセルを取得して、セルの名前とセルが空かどうかをユーザーに知らせることができます。

4

2 に答える 2

0

ClickableTextCell を使用して、クリック可能なセルを作成します。以下のコードの詳細を参照してください。

nameCell = new ClickableTextCell() {
            @Override
            public void render(com.google.gwt.cell.client.Cell.Context context,
                    String data, SafeHtmlBuilder sb) {
                super.render(context, "", sb);

                    sb.appendHtmlConstant("<input type=text value='"+data+"' />);

        };

        nameColumn = new Column<Document, String>(nameCell) {

            @Override
            public String getValue(Document object) {
                //code
            }
        };
于 2012-06-26T13:26:14.303 に答える
0

各 Column に対して Cell のインスタンスは 1 つだけであり、すべての値が Cell インスタンスによって表されるわけではないことに注意してください。上記の構造は、CellTable.setRowData で設定したデータの構造になります。

Cell は、 AbstractCellのスーパー コンストラクターまたはCellgetConsumedEventsで定義されたメソッドを介して、関心のあるイベントを宣言する必要があります。あなたの場合、「クリック」イベント。

その後、カスタム セルにメソッドを実装onBrowserEventし、クリックに反応できます。このメソッドには、イベントが参照する行と列 ( Cell.Contextを参照)、およびクリックに関連付けられたキーと値を示すコンテキストが渡されます。

あなたの場合、カスタム セルは次のようになります。

public class MyCell extends AbstractCell<String> {
    public MyCell() {
        super("click");
    }

    @Override
    public void onBrowserEvent(Context context, Element parent, String value, NativeEvent event, ValueUpdater<String> valueUpdater) {
        // Handle the click event.
        if ("click".equals(event.getType())) {
            // Ignore clicks that occur outside of the outermost element.
            EventTarget eventTarget = event.getEventTarget();
            if (parent.getFirstChildElement().isOrHasChild(Element.as(eventTarget))) {
                doAction(value, valueUpdater);
            }
        }
    }
}

レベルでイベントをインターセプトすることもできます。

詳細については、開発ガイドをご覧ください。

于 2012-06-26T13:27:43.570 に答える