• 追加された行はこの色です。
  • 削除された行はこの色です。
---
category: swing
folder: ShowingDisplayableVisible
title: JComponentの表示状態
tags: [JComponent, HierarchyListener, JScrollPane, JTabbedPane, CardLayout]
author: aterai
pubdate: 2009-04-20T14:24:13+09:00
description: JComponentの表示状態が切り替わった時、そのisDisplayable、isShowing、isVisibleメソッドが返す値をテストします。
image: https://lh3.googleusercontent.com/_9Z4BYR88imo/TQTS-a1ZnQI/AAAAAAAAAjo/jB4n-1WmEIs/s800/ShowingDisplayableVisible.png
---
* 概要 [#t8509340]
`JComponent`の表示状態が切り替わった時、その`isDisplayable`、`isShowing`、`isVisible`メソッドが返す値をテストします。
* 概要 [#summary]
`JComponent`の表示状態が切り替わった時、その`isDisplayable()`、`isShowing()`、`isVisible()`メソッドが返す値をテストします。

#download(https://lh3.googleusercontent.com/_9Z4BYR88imo/TQTS-a1ZnQI/AAAAAAAAAjo/jB4n-1WmEIs/s800/ShowingDisplayableVisible.png)

* サンプルコード [#e72673c3]
* サンプルコード [#sourcecode]
#code(link){{
button.addHierarchyListener(new HierarchyListener() {
  @Override public void hierarchyChanged(HierarchyEvent e) {
    if ((e.getChangeFlags() & HierarchyEvent.SHOWING_CHANGED) != 0) {
      printInfo("SHOWING_CHANGED");
    } else if ((e.getChangeFlags() & HierarchyEvent.DISPLAYABILITY_CHANGED) != 0) {
      printInfo("DISPLAYABILITY_CHANGED");
    }
  }
});
}}

* 解説 [#c904a45d]
上記のサンプルでは、コンポーネント(`JButton`)に`HierarchyListener`を追加して、表示状態が切り替わった時の`isDisplayable`、`isShowing`、`isVisible`を調べています。
* 解説 [#explanation]
上記のサンプルでは、コンポーネント(`JButton`)に`HierarchyListener`を追加して、表示状態などが切り替わった時の`isDisplayable`、`isShowing`、`isVisible`メソッドの戻り値を調べています。

- 対象ボタンを作成した後、かつパネルにそれを追加して`frame.setVisible(true)`を実行する前の場合
- 対象ボタンを作成してパネルに追加した状態で`JFrame#setVisible(true)`を実行する前の場合:
-- `isDisplayable`: `false`
-- `isShowing`: `false`
-- `isVisible`: `true`

- `frame.setVisible(true)`後: `HierarchyEvent.DISPLAYABILITY_CHANGED`
-- `isDisplayable`: `true`
-- `isShowing`: `false`
-- `isVisible`: `true`

- `HierarchyEvent.SHOWING_CHANGED`
-- `isDisplayable`: `true`
-- `isShowing`: `true`⇔`false`
-- `isVisible`: `true`

- コンポーネントが`JScrollPane`の表示領域にない、フレームがアイコン化、別パネルの裏に隠れているといった場合
- コンポーネントが`JScrollPane`の表示領域外、またはフレームがアイコン化、別パネルの裏に隠れているといった場合:
-- `isDisplayable`: `true`
-- `isShowing`: `true`
-- `isVisible`: `true`

- コンポーネントが`JTabbedPane`や`CardLayout`の表示領域にないなど(親コンポーネントが非表示)の場合
- コンポーネントが親の`JTabbedPane`や`CardLayout`を設定した`JPanel`などの表示領域外(コンポーネントが非表示)の場合:
-- `isDisplayable`: `true`
-- `isShowing`: `false`
-- `isVisible`: `true`

- コンポーネントが`setVisible(false)`と設定された場合
- コンポーネントが`setVisible(false)`と設定された場合:
-- `isDisplayable`: `true`
-- `isShowing`: `false`
-- `isVisible`: `false`

//* 参考リンク
* コメント [#s4735b0e]
* 参考リンク [#reference]
- [https://docs.oracle.com/javase/jp/8/docs/api/java/awt/Component.html#isDisplayable-- Component#isDisplayable() (Java Platform SE 8)]
- [https://docs.oracle.com/javase/jp/8/docs/api/java/awt/Component.html#isShowing-- Component#isShowing() (Java Platform SE 8)]
- [https://docs.oracle.com/javase/jp/8/docs/api/java/awt/Component.html#isVisible-- Component#isVisible() (Java Platform SE 8)]

* コメント [#comment]
#comment
#comment