3

以下の問題をサポートしてください。

1 つのテーブルとその他のコンポーネントを含むダイアログがあります。そのテーブルには複数の行と列があります。列には、ユーザーがデータを入力するテキスト フィールドが含まれています。

ただし、ソース コードは以下の他のレイヤーによってビルドされます。

  1. ダイアログ コンポーネントは DialogA クラスによって構築されます
  2. テーブル コンポーネントは TableB クラスによって構築されます
  3. TableB は、このテーブルの列、行、テキスト フィールドを生成するジェネレータ クラス GeneratorC を呼び出します。

GeneratorC にとどまると、TableB のテキスト フィールドにリスナーを追加してイベントをキャッチできますが、DialogA にとどまっているため、そのテキスト フィールドの値変更イベントをキャッチできません。TableB にリスナーを追加しましたが、このリスナーは列と行のイベントのみをキャッチしますが、このリスナーはそのテキスト フィールドのイベントをキャッチしません。

実際には、テキストフィールドのキャッチ値変更イベントのみが必要です。現在、私はまだこの問題の解決策を見つけていません。

ソース コード セグメントは TableB にリスナーを追加します。このソース コードは DialogA に残ります。

 TableB.addListener(new Property.ValueChangeListener()
    {
        private static final long serialVersionUID =
        1L;

        @Override
        public void valueChange(
            ValueChangeEvent event)
        {
             String temp = (String)event.getProperty().getValue();
        }
   });

あなたの答えを楽しみにしています。

4

1 に答える 1

0

リスナーは、テーブル自体ではなく、ColumnGenerator に追加するテキスト フィールドに追加する必要があります。

    private class TextFieldColumnGenerator implements Table.ColumnGenerator {

            private TextField tf;

            @Override
            public Component generateCell(final Table source, final Object itemId,
                    final Object columnId) {
                Item item = source.getItem(itemId);
                        tf.addListener(new FieldEvents.TextChangeListener() {

                @Override
                public void textChange(TextChangeEvent event) {

                    doSomething(event.getText());
                }
            });
    return tf;
    }

これは正しいはずだと思います。IDE の外で書いたので、エラーが発生する可能性があります。

于 2012-06-05T11:30:33.933 に答える