概要

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

サンプルコード

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 all

解説

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

  • 対象ボタンを作成してパネルに追加した状態で、frame.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の表示領域にないなど(親コンポーネントが非表示)の場合:
    • isDisplayable: true
    • isShowing: false
    • isVisible: true
  • コンポーネントがsetVisible(false)と設定された場合:
    • isDisplayable: true
    • isShowing: false
    • isVisible: false

コメント