概要
SwingUtilities.getWindowAncestor()
などで、親ウィンドウを取得します。
Screenshot
Advertisement
サンプルコード
JButton button = new JButton("show frame title");
button.addActionListener(e -> {
// 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);
}
});
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
用?
- 親の