0

こんにちはStackOverflowエキスパート

説明

動的に作成された多数のTabItemを含むTabFolderを含むSWTページがあります。

各TabItemで、コンポジットを作成し、TabItem.setControl()をコンポジットに設定します。次に、このコンポジットをアイテムを描画するページとして使用します。テキストボックスとラベルを含む一連のコントロールを描画します。

[最初のデフォルト]タブの場合、これは正常に機能します。問題はありません。

問題

最初のタブではないタブでは、次の問題があります。

  • コントロールの編集済み/有効状態を視覚的に変更できません。
  • 要素のテキストコンテンツを視覚的に設定できません

コントロールが無効になり、灰色の外観になります。

しかし、マウスでコンテンツを選択し、CTRL+Cを使用してコピーすることはできます。したがって、テキストcontetがあり、編集可能です。

視覚的には更新されていません。

コメント、コードのリクエスト、例が提供され、Welcommedに役立ちます。

更新

コントロールを有効にしようとするコードにsuggestdebugloopを追加してみました。これが結果でした:

[main] INFO [dk.viking.controller.LayerController]-f038.stklokが編集可能[true]になり、有効になりました[true]

[メイン]情報[dk.viking.controller.LayerController]-trueテキスト{}

[メイン]情報[dk.viking.controller.LayerController]-trueコンポジット{}

[メイン]情報[dk.viking.controller.LayerController]-trueTabFolder{}

[メイン]情報[dk.viking.controller.LayerController]-trueシェル{バイキングGUI}

4

2 に答える 2

1

私の推測では、TabItem自体は無効になっています。コードのどこかにループを追加して、テキストコントロールを取得し、その有効状態を出力してから、親コンポジットを続行して同じことを行うことをお勧めします。

 Control c = text;
 while (c != null) {
      System.out.println(c.getEnabled()+" "+c);
      c = c.getParent();
 }

これが問題の原因であるかどうかがわかります。そうでない場合は、ブレークポイントを設定し、Text.setEditable()誰がそれを呼び出すかを確認します。

[編集]テキストが編集可能であるが表示されていない場合(つまり、灰色に灰色)、何getBackground ()を確認してgetForeground ()戻ります。たぶん誰かが両方を同じ色に設定しました。

于 2010-03-16T10:08:17.830 に答える
0

問題の原因を見つけました。

TabItemのコンポジットにコントロールを設定するために使用されたコードが2回呼び出されていました。

したがって、すべてのコントロールが複製され、コントローラーには実際に使用されたコントロールの半分へのアクティブな参照しかありませんでした。

私たちが見た描画動作を正確に説明することはできませんが、これらの呼び出しの1つを削除すると、問題は解決しました。

私の問題がいつか他の誰かを助けることができることを願っています。

于 2010-03-18T14:22:54.630 に答える