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

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

編集者:Terai Atsuhiro
作成日:2005-05-09
更新日:2023-08-25 (金) 13:56:29

概要

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

#screenshot

サンプルコード

 JButton button = new JButton(new AbstractAction("フレームのタイトルを表示") {
   public void actionPerformed(ActionEvent ae) {
     final JButton btn  = (JButton)ae.getSource();
     final JFrame frame = (JFrame)SwingUtilities.getWindowAncestor(btn);
     //final JFrame frame = (JFrame)JOptionPane.getFrameForComponent(btn);
     SwingUtilities.invokeLater(new Runnable() {
       public void run() {
         JOptionPane.showMessageDialog(frame,
                     "親フレームのタイトル: "+frame.getTitle(),
                     "タイトル", JOptionPane.INFORMATION_MESSAGE);
       }
     });
   }
 });
  • &jnlp;
  • &jar;
  • &zip;

解説

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

SwingUtilities.getWindowAncestor、SwingUtilities.getRootメソッドを使うとjava.awt.Windowが、JOptionPane.getFrameForComponentメソッドを使うとjava.awt.Frameが返されます。

コメント

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