2012-04-30 14 views
4

私はスイングコンポーネントがたくさんあるアプリケーションをいくつかのコンテナに入れています。 私は部品が入っているコンテキストに基づいて情報を表示、右クリックしてポップアップメニューを実装していますコンポーネントが特定のコンテナ内にあるかどうかを調べる

を例与えるために:私はJTextFieldの上で右クリックした場合 を、私は「foo」を表示させたいですテキストフィールドがJScrollPane内にある場合はポップアップ、それ以外の場合は「bar」しかし、JTextField自体は、他のいくつかのJPanelにネストすることができます。

私はこのような何か行うことができます:

public static boolean isInScrollPane(JComponent comp) { 

    Container c = comp.getParent(); 

    while (c != null) {   
     if (c instanceof JScrollPane) { 
      return true; 
     } else { 
      c = c.getParent(); 
     } 
    } 
    return false; 
} 

をしかし、私はそこにはるかに優れたソリューションがすでに利用可能であり、私はそれを見つけることができませんでした賭けます。

私にヒントを与えてもらえますか?

答えて

7

コードは基本的にSwingUtilies.getAncestorOfClass()メソッドと一致します。したがって、コードは次のように簡略化することができます:

public static boolean isInScrollPane(JComponent comp) 
{ 
    return SwingUtilities.getAncestorOfClass(JScrollPane.class, comp) != null; 
} 
+0

ああ、私はすでにそれが簡単だろうと思っていました。私は_SwingUtilities_を見ましたが、これを見ませんでした。ありがとう! – moeTi