Swing/WindowAncestor のバックアップの現在との差分(No.9)
TITLE:WindowAncestor(親ウィンドウ)の取得
Posted by aterai at 2005-05-09
WindowAncestor(親ウィンドウ)の取得
SwingUtilities.getWindowAncestor()などで、親ウィンドウを取得します。- category: swing folder: WindowAncestor title: WindowAncestor(親ウィンドウ)の取得 tags: [JFrame, Window] author: aterai pubdate: 2005-05-09T21:28:35+09:00 description: SwingUtilities.getWindowAncestor()などで、親ウィンドウを取得します。 image:
概要
SwingUtilities.getWindowAncestor()
などで、親ウィンドウを取得します。
- &jnlp;
- &jar;
- &zip;
Screenshot
Advertisement
サンプルコード
#spanend
#spandel
JButton button = new JButton(new AbstractAction("フレームのタイトルを表示") {
#spanend
public void actionPerformed(ActionEvent ae) {
final JButton btn = (JButton)ae.getSource();
final JFrame frame = (JFrame)SwingUtilities.getWindowAncestor(btn);
EventQueue.invokeLater(new Runnable() {
public void run() {
JOptionPane.showMessageDialog(frame,
"親フレームのタイトル: "+frame.getTitle(),
"タイトル", JOptionPane.INFORMATION_MESSAGE);
}
});
#spanadd
* サンプルコード [#sourcecode]
#spanend
#spanadd
#code(link){{
#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);
}
});
解説
解説
自分(コンポーネント)の最初の上位ウィンドウ(親ウィンドウ)を取得します。- SwingUtilities.getWindowAncestor(Component c)
- SwingUtilities.windowForComponent(Component c) は、getWindowAncestorをラップしただけのメソッド
- 親のjava.awt.Window が返る
- 親Window が無い場合は、null
- 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
から呼ばれた場合はそのまま自身が返る - 下のコメント参照
- 自身の親
- JComponent#getTopLevelAncestor()
- 自身の親コンテナ(java.awt.Window または java.awt.Applet) が返る
- 親コンテナが無い場合は、null
- 下のコメント参照
- JOptionPane.getFrameForComponent(Component parentComponent)
- 親の
java.awt.Frame
が返る - 有効な親
Frame
が無い場合はJOptionPane.getRootFrame()
で非表示にしているTookKit Private
なフレームが返る -
JOptionPane
用?
- 親の
- JOptionPane.getFrameForComponent(Component parentComponent)
- 親のjava.awt.Frame が返る
- 有効な親Frameが無い場合は JOptionPane.getRootFrame() で、非表示にしているTookKit Privateなフレームが返る
- JOptionPane用?
参考リンク
コメント
- JComponent#getTopLevelAncestor()でもほぼ同じ内容が取得できるような感じですね(自分自身からスタートするか、親からスタートするかの違いはあるようですが)。ただ、この場合、Windowの他にAppletが戻される場合もあるようですが。 -- syo?
- 補足ありがとうございます。WindowかAppletか気にする必要が無いのは便利そうですね。 -- aterai
コメント
-
JComponent#getTopLevelAncestor()
でもほぼ同じ内容が取得できるような感じですね(自分自身からスタートするか、親からスタートするかの違いはあるようですが)。ただ、この場合、Window
の他にApplet
が戻される場合もあるようですが。 -- syo- 補足ありがとうございます。
Window
かApplet
か気にする必要が無いのは便利そうですね。 -- aterai
- 補足ありがとうございます。