JFace アプリケーションで使用する一連のアクションを作成し、それらのアクションに画像を割り当てると、それらの画像がツールバー (必要な場所) とメニュー (不要な場所) の両方に表示されます。
2 つの完全に別個のアクション セットを提供する (そもそもアクション ポイントの一部を排除する) 以外に、これらの画像をツールバーにのみ表示し、メニューにテキストのみを表示するようにするにはどうすればよいでしょうか?
私もこの問題に遭遇しました (ただし、ツールバーとメニューに別のテキストが必要でした)。結局、同じアクションを使用しましたが、2 つの異なるインスタンスが使用されました。
// Use this one in the menu
Action a = new Action();
// Use this one in the toolbar
Action a2 = new Action();
a2.setImageDescriptor(img);
または、ツールバー バージョンのアクションに画像記述子を保存し、メニュー バージョンのアクションに null を設定することもできます。
私は本質的にアクションを複製し、画像のあるものと画像のないものをペアにして、そもそもアクションの利点を排除することになりました(ため息). 一方、各アクションはコントローラー内の単一のメソッドを呼び出して作業を実行するだけなので、あまり陰湿ではなく、ペアをグループ化することで、何が起こっているのかが合理的に明確になります。
私はこれを自分で確認していませんが、このメソッドを参照してください。
public int getStyle() { ... }
これは Action クラスで定義されており、Action がグラフィカルに表現されるインターフェイス要素のタイプを返すように見えます。したがって、 getImageDescriptor() メソッドをオーバーライドできます。
public ImageDescriptor getImageDescriptor() {
if (getStyle() == AS_DROP_DOWN_MENU)
return null; // No icon in a menu
return someImageDescriptor; // Actual icon
}