2017-10-11 13 views
1

私はJMenuItemとして始まるメニューを持っています。それが選択されると、私はアクションリスナーがそのメニュー項目をサブメニュー項目のメニューに置き換えることを望みます。JMenuItemをJMenuと置き換える(並べ替えなし)

私はparentMenu.remove(subMenuItem); parentMenu.add(subMenu);を使用しようとしましたが、これは親メニュー項目の一番下にメニューを移動します。私はそれが親のメニュー項目にある場所にとどまりたい。

親メニューを再作成する必要はありますか?

(私はあなたが本当にそれが必要だと思われる場合SSCCEを提供/書くことができます。)

答えて

1

あなたが好きな場所メニューを挿入する

Container.add(component, index); 

メソッドを使用します。

もちろん、別のContainerメソッドを使用して適切なインデックスを見つけて、コンテナ内のすべてのコンポーネントを反復処理する必要があります。

+0

ありがとう!私はちょうど追加(メニュー、インデックス)を見つけて、インデックスを取得する方法を疑問に思っていました...スタックオーバーフローを検索しました.getComponentZOrderを見つけましたが、-1(見つからない?)私は親メニューのコンポーネントを反復処理して見つけたときに置き換えました...私はすぐに答えを書くでしょう。 – geowar

0

私が見つけた(そして、カリカリが示唆した)私は.add(subMenu, index)を使用します。 「親メニューでインデックスを検索するにはどうすればよいですか?」という質問につながります。 .getComponentZOrder()が見つかったスタックオーバーフローを検索していますが、それは常に-1を返します(見つからない?)。

for (int i = 0; i < parentMenu.getMenuComponentCount(); i++) { 
     if (parentMenu.getMenuComponent(i) == subMenuItem) { 
      checkMenu.remove(subMenuItem); 
      checkMenu.add(subMenu, i); 
      break; 
     } 
    } 

編集:だから私はこの一緒に行くことになった私はまた.getComponentZOrder()方法を考え出した:

Container container = subMenuItem.getParent(); 
if (container != null) { 
    int index = container.getComponentZOrder(subMenuItem); 
    if (index > -1) { 
     checkMenu.remove(subMenuItem); 
     checkMenu.add(subMenu, index); 
    } 
} 

(それは、コードの1行であると私は.getComponentZOrderはかなりやっている疑いがあります同じ仕事なので、私はおそらくちょうどサブメニュー(項目)自分自身を反復するつもりです。)

関連する問題