概要

JComponentの表示状態が切り替わった時、そのisDisplayable()isShowing()isVisible()メソッドが返す値をテストします。

サンプルコード

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");
    }
  }
});
View in GitHub: Java, Kotlin

解説

上記のサンプルでは、コンポーネント(JButton)にHierarchyListenerを追加して、表示状態などが切り替わった時のisDisplayableisShowingisVisibleメソッドの戻り値を調べています。

  • 対象ボタンを作成してパネルに追加した状態で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: truefalse
    • isVisible: true
  • コンポーネントがJScrollPaneの表示領域外、またはフレームがアイコン化、別パネルの裏に隠れているといった場合:
    • isDisplayable: true
    • isShowing: true
    • isVisible: true
  • コンポーネントが親のJTabbedPaneCardLayoutを設定したJPanelなどの表示領域外(コンポーネントが非表示)の場合:
    • isDisplayable: true
    • isShowing: false
    • isVisible: true
  • コンポーネントがsetVisible(false)と設定された場合:
    • isDisplayable: true
    • isShowing: false
    • isVisible: false

参考リンク

コメント