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

Advertisement
サンプルコード
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);
}
}));
View in GitHub: Java, Kotlin解説
自分(コンポーネント)の最初の上位ウィンドウ(親ウィンドウ)を取得します。
- 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
から呼ばれた場合はそのまま自身が返る- 下のコメント参照
- 自身の親
- JOptionPane.getFrameForComponent(Component parentComponent)
- 親の
java.awt.Frame
が返る - 有効な親
Frame
が無い場合はJOptionPane.getRootFrame()
で非表示にしているTookKit Private
なフレームが返る JOptionPane
用?
- 親の