• 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

概要

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メソッドの戻り値を調べています。

  • 対象ボタンを作成してパネルに追加した状態で、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

参考リンク

コメント