Q:
Q&A 1003 の screenMenuBar プロパティを使ったときに、私の Swing アプリケーションのサブメニューは、JMenuItems の追加や削除を行ってもアップデートされません。
A:
これは、現在の screenMenuBar の実装に関する既知の問題であり、AWT を使うか、screenMenuBar プロパティをセットせずに Swing を使うと発生しません。現在の唯一の回避策は、サブメニューを削除し、変更後の内容が Mac OS の Screen MenuBar に強制的に再描画されるように再構築することです。リスト 1 に、その方法を示します。
// 回避策:subMenu のコンポーネントをすべて取得し、再構築または置換する
// サブメニューに対して、あらゆる種類の Component (JSeparators なども
// 含めて)を追加または削除する場合は必ずこのコードを呼び出す
Component[] subMenuItems = subMenu.getMenuComponents();
topMenu.remove(subMenu);
subMenu = new JMenu("Open Recent");
for (int i=0; i < subMenuItems.length; i++) {
subMenu.add(subMenuItems[i]);
}
topMenu.add(subMenu);
| |
リスト 1 (回避策)サブメニューからの JMenuItem の削除
|
[2002 年 7 月 12 日]
|