Swing/WindowAncestor のバックアップの現在との差分(No.5)
TITLE:WindowAncestor(親ウィンドウ)の取得
WindowAncestor(親ウィンドウ)の取得
編集者:Terai Atsuhiro~
作成日:2005-05-09
更新日:2023-08-25 (金) 13:56:29
概要
SwingUtilities.getWindowAncestor()
などで、親ウィンドウを取得します。
Screenshot
Advertisement
概要
SwingUtilities.getWindowAncestor()などで、親ウィンドウを取得します。サンプルコード
#spanend
#spanadd
JButton button = new JButton("show frame title");
#spanend
#spanadd
button.addActionListener(e -> {
#spanend
// Container w = ((JComponent) e.getSource()).getTopLevelAncestor();
Window w = SwingUtilities.getWindowAncestor((Component) e.getSource());
// Frame frame = JOptionPane.getFrameForComponent((Component) e.getSource());
if (w instanceof Frame) {
Frame frame = (Frame) w;
String msg = "parentFrame.getTitle(): " + frame.getTitle();
JOptionPane.showMessageDialog(
frame, msg, "title", JOptionPane.INFORMATION_MESSAGE);
}
#spanadd
});
#spanend
#spanadd
View in GitHub: Java, Kotlin#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); } }); } });
- SwingUtilities.getWindowAncestor(Component c)
-
SwingUtilities.windowForComponent(Component c)
は、このgetWindowAncestor
をラップしただけのメソッド - 親の
java.awt.Window
が返る - 親
Window
が無い場合はnull
が返る - 引数の
Component
自体がWindow
の場合そのWindow
のオーナーWindow
が返る- オーナー
Window
がnull
の場合はnull
が返る
- オーナー
-
- SwingUtilities.getRoot(Component c)
- 親の
Component
(java.awt.Window
またはjava.awt.Applet
)が返る-
Window
の場合はc.getParent()
で見つかる最初の上位Window
オブジェクトだが、Applet
の場合はJComponent#getTopLevelAncestor()
とは異なり最後の上位Applet
オブジェクト
-
- どちらも存在しない場合は
null
- 引数の
Component
自体がWindow
の場合はそのまま自身が返る
- 親の
- JComponent#getTopLevelAncestor()
- 自身の親
Container
(java.awt.Window
またはjava.awt.Applet
)が返る - 親
Container
が無い場合はnull
-
java.awt.Window
またはjava.awt.Applet
から呼ばれた場合はそのまま自身が返る - 下のコメント参照
- 自身の親
- &jnlp;
- &jar;
- &zip;
- JOptionPane.getFrameForComponent(Component parentComponent)
- 親の
java.awt.Frame
が返る - 有効な親
Frame
が無い場合はJOptionPane.getRootFrame()
で非表示にしているTookKit Private
なフレームが返る -
JOptionPane
用?
- 親の
解説
自分(コンポーネント)の最初の上位ウィンドウ(親ウィンドウ)を取得します。参考リンク
SwingUtilities.getWindowAncestor、SwingUtilities.getRootメソッドを使うとjava.awt.Windowが、JOptionPane.getFrameForComponentメソッドを使うとjava.awt.Frameが返されます。コメント
-
JComponent#getTopLevelAncestor()
でもほぼ同じ内容が取得できるような感じですね(自分自身からスタートするか、親からスタートするかの違いはあるようですが)。ただ、この場合、Window
の他にApplet
が戻される場合もあるようですが。 -- syo- 補足ありがとうございます。
Window
かApplet
か気にする必要が無いのは便利そうですね。 -- aterai
- 補足ありがとうございます。
コメント
- JComponent#getTopLevelAncestor()でもほぼ同じ内容が取得できるような感じですね(自分自身からスタートするか、親からスタートするかの違いはあるようですが)。ただ、この場合、Windowの他にAppletが戻される場合もあるようですが。 -- syo?