TITLE:WindowAncestor(親ウィンドウ)の取得

Posted by at 2005-05-09

WindowAncestor(親ウィンドウ)の取得

SwingUtilities.getWindowAncestor()などで、親ウィンドウを取得します。

  • &jnlp;
  • &jar;
  • &zip;
WindowAncestor.png

サンプルコード

JButton button = new JButton(new AbstractAction("フレームのタイトルを表示") {
  @Override public void actionPerformed(ActionEvent e) {
    JButton btn  = (JButton)e.getSource();
    JFrame f = (JFrame)SwingUtilities.getWindowAncestor(btn);
    //JFrame f = (JFrame)btn.getTopLevelAncestor();
    //JFrame f = (JFrame)JOptionPane.getFrameForComponent(btn);
    JOptionPane.showMessageDialog(f, "parentFrame.getTitle(): "+f.getTitle(),
                                  "title", JOptionPane.INFORMATION_MESSAGE);
  }
}));

解説

自分(コンポーネント)の最初の上位ウィンドウ(親ウィンドウ)を取得します。

  • JComponent#getTopLevelAncestor()
    • 自身の親コンテナ(java.awt.Window または java.awt.Applet) が返る
    • 親コンテナが無い場合は、null
    • 下のコメント参照

コメント

  • JComponent#getTopLevelAncestor()でもほぼ同じ内容が取得できるような感じですね(自分自身からスタートするか、親からスタートするかの違いはあるようですが)。ただ、この場合、Windowの他にAppletが戻される場合もあるようですが。 -- syo
  • 補足ありがとうございます。WindowかAppletか気にする必要が無いのは便利そうですね。 -- aterai