当初の目標:
メニューを表示するために使用する TreeMenu があります。このツリーで、ユーザーはさまざまな項目を選択できます。
ユーザーが最初のアイテムを選択した後に新しいアイテムを選択できないように、ツリーを無効にしたいと思います。キャッチは、グレーアウトされた外観を使用することが許可されていないため、setEnabled を使用できないことです。外観/色は変更されない場合があります。
私たちの提案するソリューション
私たちの最初のアイデアは、メニューの上に SWT.NO_BACKGROUND を指定して Composite を使用し、ユーザーによる TreeMenu の操作を防ぐことでした。
コード:
final Composite cover = new Composite(getPage().shell, SWT.NO_BACKGROUND);
cover.setLocation(getMenu().getLocation());
cover.setSize(getMenu().getSize());
cover.moveAbove(getMenu());
これは再描画に問題があります。
画面が別の画面で覆われてから前面に戻された場合、カバー コンポジットは前に重なったウィンドウの断片で埋められます。
私たちのアイデアは、メニューを手動で再描画することでした:
cover.moveBelow(getMenu());
getMenu().update();
cover.moveAbove(getMenu());
コードを paintEventListener 内に配置しました。
しかし、これにより無限ループが発生し、問題は解決しませんでした。
質問
当初の目標を達成する方法を知っている人はいますか?
提案されたソリューションを機能させる方法を知っている人はいますか?