6

複数のコンテナーにネストされた、多くのスイング コンポーネントを含むアプリケーションがあります。コンポーネントのコンテキストに基づいて情報を表示する右クリック ポップアップ メニューを実装しています。

例を挙げると、JTextField を右クリックすると、テキストフィールドが JScrollPane 内にある場合はポップアップに「foo」を表示し、そうでない場合は「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;
}

しかし、はるかに優れたソリューションが既に利用可能であり、私はそれを見つけられなかったに違いありません。

誰かヒントを教えてください。

4

1 に答える 1

9

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

public static boolean isInScrollPane(JComponent comp)
{
  return SwingUtilities.getAncestorOfClass(JScrollPane.class, comp) != null;
}
于 2012-04-30T10:31:01.973 に答える