モジュール java.desktop
パッケージ javax.swing

クラスJLayer<V extends Component>

型パラメータ:
V - JLayerのビュー・コンポーネントの型
すべての実装されたインタフェース:
ImageObserver, MenuContainer, PropertyChangeListener, Serializable, EventListener, Accessible, Scrollable

public final class JLayer<V extends Component> extends JComponent implements Scrollable, PropertyChangeListener, Accessible
JLayerは、さまざまな高度なペイント効果を実装したり、そのボーダー内で生成されるすべてのAWTEventの通知を受信したりするために使用できる、Swingコンポーネントのための汎用のデコレータです。

JLayerは、ペイント処理および入力イベントを、実際の装飾を実行するLayerUIオブジェクトに委譲します。

LayerUIに実装されているカスタム・ペイントおよびイベント通知は、JLayer自身とそのすべてのサブコンポーネントで機能します。 この組み合わせによって、階層の一時ロック、複合コンポーネント用のデータ・ヒント、拡張されたマウス・スクロールなどの高度な新機能を追加して、既存のコンポーネントを強化できます。

複合コンポーネントにカスタム・ペイントを実行したり、そのサブコンポーネントから入力イベントをキャッチしたりするだけなら、JLayerは良い解決策です。

 import javax.swing.*;
 import javax.swing.plaf.LayerUI;
 import java.awt.*;

 public class JLayerSample {

     private static JLayer<JComponent> createLayer() {
         // This custom layerUI will fill the layer with translucent green
         // and print out all mouseMotion events generated within its borders
         LayerUI<JComponent> layerUI = new LayerUI<JComponent>() {

             public void paint(Graphics g, JComponent c) {
                 // paint the layer as is
                 super.paint(g, c);
                 // fill it with the translucent green
                 g.setColor(new Color(0, 128, 0, 128));
                 g.fillRect(0, 0, c.getWidth(), c.getHeight());
             }

             public void installUI(JComponent c) {
                 super.installUI(c);
                 // enable mouse motion events for the layer's subcomponents
                 ((JLayer) c).setLayerEventMask(AWTEvent.MOUSE_MOTION_EVENT_MASK);
             }

             public void uninstallUI(JComponent c) {
                 super.uninstallUI(c);
                 // reset the layer event mask
                 ((JLayer) c).setLayerEventMask(0);
             }

             // overridden method which catches MouseMotion events
             public void eventDispatched(AWTEvent e, JLayer<? extends JComponent> l) {
                 System.out.println("AWTEvent detected: " + e);
             }
         };
         // create a component to be decorated with the layer
         JPanel panel = new JPanel();
         panel.add(new JButton("JButton"));

         // create the layer for the panel using our custom layerUI
         return new JLayer<JComponent>(panel, layerUI);
     }

     private static void createAndShowGUI() {
         final JFrame frame = new JFrame();
         frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

         // work with the layer as with any other Swing component
         frame.add(createLayer());

         frame.setSize(200, 200);
         frame.setLocationRelativeTo(null);
         frame.setVisible(true);
     }

     public static void main(String[] args) throws Exception {
         SwingUtilities.invokeAndWait(new Runnable() {
             public void run() {
                 createAndShowGUI();
             }
         });
     }
 }
 
ノート: JLayerは次のメソッドをサポートしません。 いずれかを使用するとUnsupportedOperationExceptionがスローされ、JLayerにコンポーネントを追加することができます。setView(Component)またはsetGlassPane(JPanel)を使用します。

導入されたバージョン:
1.7
関連項目:
  • コンストラクタの詳細

    • JLayer

      public JLayer()
      nullビュー・コンポーネントとデフォルトのLayerUIを使用して新しいJLayerオブジェクトを作成します。
      関連項目:
    • JLayer

      public JLayer(V view)
      デフォルトのLayerUIを使用して新しいJLayerオブジェクトを作成します。
      パラメータ:
      view - このJLayerによって装飾されるコンポーネント
      関連項目:
    • JLayer

      public JLayer(V view, LayerUI<V> ui)
      指定されたビュー・コンポーネントとLayerUIオブジェクトを使用して新しいJLayerオブジェクトを作成します。
      パラメータ:
      view - 装飾されるコンポーネント
      ui - このJLayerが使用するLayerUIの委譲先
  • メソッドの詳細

    • getView

      public V getView()
      JLayerのビュー・コンポーネントまたはnullを返します。
      これはバウンド・プロパティです。
      戻り値:
      JLayerのビュー・コンポーネント。存在しない場合はnull
      関連項目:
    • setView

      public void setView(V view)
      JLayerのビュー・コンポーネントを設定します。nullも指定できます。
      これはバウンド・プロパティです。
      パラメータ:
      view - このJLayerのビュー・コンポーネント
      関連項目:
    • setUI

      public void setUI(LayerUI<? super V> ui)
      ペイントを実行して、このJLayerの入力イベントを受信するLayerUIを設定します。
      パラメータ:
      ui - このJLayerLayerUI
    • getUI

      public LayerUI<? super V> getUI()
      このJLayerLayerUIを返します。
      オーバーライド:
      クラスJComponentgetUI
      戻り値:
      このJLayerLayerUI
    • getGlassPane

      public JPanel getGlassPane()
      JLayerのglassPaneコンポーネントまたはnullを返します。
      これはバウンド・プロパティです。
      戻り値:
      JLayerのglassPaneコンポーネント。存在しない場合はnull
      関連項目:
    • setGlassPane

      public void setGlassPane(JPanel glassPane)
      JLayerのglassPaneコンポーネントを設定します。nullも指定できます。
      これはバウンド・プロパティです。
      パラメータ:
      glassPane - このJLayerのglassPaneコンポーネント
      関連項目:
    • createGlassPane

      public JPanel createGlassPane()
      デフォルトのglassPaneを作成するために、コンストラクタ・メソッドから呼び出されます。 デフォルトでは、このメソッドは可視性をtrueに、不透明性をfalseに設定して新しいJPanelを作成します。
      戻り値:
      デフォルトのglassPane
    • setLayout

      public void setLayout(LayoutManager mgr)
      このコンテナのレイアウト・マネージャを設定します。 レイアウト・マネージャが設定されるのを防ぐにはこのメソッドをオーバーライドします。

      ノート: mgrnull以外の場合、レイアウト・マネージャがJLayerではサポートされていないためこのメソッドは例外をスローします。

      オーバーライド:
      setLayout、クラス: Container
      パラメータ:
      mgr - 指定されたレイアウト・マネージャ
      例外:
      IllegalArgumentException - このメソッドがサポートされていない場合
      関連項目:
    • setBorder

      public void setBorder(Border border)
      ビュー・コンポーネントがjavax.swing.JComponentのインスタンスである場合、その機能をgetView().setBorder(Border)メソッドに委譲します。そうでない場合、このメソッドはノー・オペレーションです。
      オーバーライド:
      setBorder 、クラス:  JComponent
      パラメータ:
      border - viewコンポーネント用にレンダリングされるボーダー
      関連項目:
    • getBorder

      public Border getBorder()
      ビュー・コンポーネントがjavax.swing.JComponentのインスタンスであれば、その機能をgetView().getBorder()メソッドに委譲し、それ以外の場合はnullを返します。
      オーバーライド:
      getBorder 、クラス:  JComponent
      戻り値:
      viewコンポーネントのボーダー・オブジェクト
      関連項目:
    • addImpl

      protected void addImpl(Component comp, Object constraints, int index)
      このメソッドはJLayerではサポートされていません。このメソッドは常にUnsupportedOperationExceptionをスローします。
      オーバーライド:
      addImpl、クラス: Container
      パラメータ:
      comp - 追加されるコンポーネント
      constraints - このコンポーネントのレイアウト制約を表現するオブジェクト
      index - コンポーネントを挿入するコンテナのリスト内での位置。-1は最後に挿入することを意味する
      例外:
      UnsupportedOperationException - このメソッドがサポートされていない場合
      関連項目:
    • isPaintingOrigin

      protected boolean isPaintingOrigin()
      常にtrueを返し、JLayerまたはその上位オブジェクトのいずれかからペイントを実行します。
      オーバーライド:
      isPaintingOrigin 、クラス:  JComponent
      戻り値:
      true
      関連項目:
    • paintImmediately

      public void paintImmediately(int x, int y, int w, int h)
      LayerUIが設定されている場合、機能をLayerUI.paintImmediately(int, int, int, int, JLayer)メソッドに委譲します。
      オーバーライド:
      paintImmediately 、クラス:  JComponent
      パラメータ:
      x - ペイント領域のx座標
      y - ペイント領域のy座標
      w - ペイント領域の幅
      h - ペイント領域の高さ
      関連項目:
    • imageUpdate

      public boolean imageUpdate(Image img, int infoflags, int x, int y, int w, int h)
      LayerUIが設定されている場合、その機能をLayerUI.imageUpdate(java.awt.Image, int, int, int, int, int, JLayer)メソッドに委譲します。
      定義:
      imageUpdate 、インタフェース: ImageObserver
      オーバーライド:
      imageUpdate 、クラス:  Component
      パラメータ:
      img - 監視対象のイメージ
      infoflags - 詳細は、imageUpdateを参照してください
      x - x座標
      y - y座標
      w - 幅
      h - 高さ
      戻り値:
      イメージ全体がロードされることをinfoflagsが示す場合はfalse、そうでない場合はtrue
      関連項目:
    • paint

      public void paint(Graphics g)
      すべてのペイントをLayerUIオブジェクトに委譲します。
      オーバーライド:
      paint 、クラス:  JComponent
      パラメータ:
      g - レンダリングするGraphics
      関連項目:
    • paintComponent

      protected void paintComponent(Graphics g)
      すべてのペイントはpaint(Graphics)およびComponentUI.update(Graphics, JComponent)メソッドによって実行されるため、このメソッドは空です。
      オーバーライド:
      paintComponent 、クラス:  JComponent
      パラメータ:
      g - 保護対象のGraphicsオブジェクト
      関連項目:
    • isOptimizedDrawingEnabled

      public boolean isOptimizedDrawingEnabled()
      JLayerは(JComponentで)このメソッドのデフォルト実装をオーバーライドし、falseを返します。 その結果、描画機構はJLayerの子に直接メッセージを送るのではなく、JLayerpaintの実装を呼び出します。
      オーバーライド:
      isOptimizedDrawingEnabled 、クラス:  JComponent
      戻り値:
      false
    • propertyChange

      public void propertyChange(PropertyChangeEvent evt)
      バウンド・プロパティの変更時に呼び出されます。
      定義:
      propertyChange、インタフェース: PropertyChangeListener
      パラメータ:
      evt - イベント・ソースと変更されたプロパティを記述するPropertyChangeEventオブジェクト。
    • setLayerEventMask

      public void setLayerEventMask(long layerEventMask)
      指定されたイベント・マスク・パラメータによって定義されたJLayerとそのすべての下位オブジェクトからのイベントを、LayerUI.eventDispatched(AWTEvent, JLayer)メソッドに送信できるようにします。

      イベントは、このJLayerLayerUIが設定されていて、JLayerが表示可能な場合に配信されます。

      次の例では、LayerUIの実装でこのメソッドを正しく使用する方法を示しています。

          public void installUI(JComponent c) {
             super.installUI(c);
             JLayer l = (JLayer) c;
             // this LayerUI will receive only key and focus events
             l.setLayerEventMask(AWTEvent.KEY_EVENT_MASK | AWTEvent.FOCUS_EVENT_MASK);
          }
      
          public void uninstallUI(JComponent c) {
             super.uninstallUI(c);
             JLayer l = (JLayer) c;
             // JLayer must be returned to its initial state
             l.setLayerEventMask(0);
          }
       
      デフォルトではJLayerはイベントを受け取らず、そのイベント・マスクは0です。

      パラメータ:
      layerEventMask - 受け取るイベント型のビット・マスク
      関連項目:
    • getLayerEventMask

      public long getLayerEventMask()
      このJLayerおよびそのLayerUIによって受信するイベント・マスクのビットマップを返します。

      つまり、LayerUI.eventDispatched(AWTEvent, JLayer)メソッドはイベント・マスクに一致するイベントのみを受け取ります。

      デフォルトではJLayerはイベントを受け取りません。

      戻り値:
      このJLayer用に受け取るイベント型のビット・マスク
    • updateUI

      public void updateUI()
      LayerUIが設定されている場合、機能をLayerUI.updateUI(JLayer)メソッドに委譲します。
      オーバーライド:
      updateUI 、クラス:  JComponent
      関連項目:
    • getPreferredScrollableViewportSize

      public Dimension getPreferredScrollableViewportSize()
      ビュー・コンポーネントのビュー・ポートの適切なサイズを返します。

      このレイヤーのビュー・コンポーネントがScrollableを実装する場合、このメソッドは、その実装をビュー・コンポーネントに委譲します。

      定義:
      getPreferredScrollableViewportSize 、インタフェース: Scrollable
      戻り値:
      ビュー・コンポーネントのビュー・ポートの適切なサイズ
      関連項目:
    • getScrollableBlockIncrement

      public int getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction)
      スクロール増分値を返します。スクロール増分値は、orientationの値によって、1ブロック分の行または列を完全に表示するために、論理行または論理列を表示するコンポーネントに必要です。

      このレイヤーのビュー・コンポーネントがScrollableを実装する場合、このメソッドは、その実装をビュー・コンポーネントに委譲します。

      定義:
      getScrollableBlockIncrement 、インタフェース: Scrollable
      パラメータ:
      visibleRect - ビュー・ポート内の可視のビュー領域
      orientation - SwingConstants.VERTICALまたはSwingConstants.HORIZONTAL。
      direction - 上または左にスクロールする場合は0より小さく、下または右にスクロールする場合は0より大きい。
      戻り値:
      指定された方向にスクロールするための「ブロック」増分値
      関連項目:
    • getScrollableTracksViewportHeight

      public boolean getScrollableTracksViewportHeight()
      レイヤーの適切な高さがビュー・ポートの高さより低い場合を除き、falseを返して、ビュー・ポートの高さがレイヤーの高さを決めないことを示します。

      このレイヤーのビュー・コンポーネントがScrollableを実装する場合、このメソッドは、その実装をビュー・コンポーネントに委譲します。

      定義:
      getScrollableTracksViewportHeight 、インタフェース: Scrollable
      戻り値:
      レイヤーがビュー・ポートの高さを追跡する必要があるかどうか
      関連項目:
    • getScrollableTracksViewportWidth

      public boolean getScrollableTracksViewportWidth()
      レイヤーの適切な幅がビュー・ポートの幅より狭い場合を除き、falseを返して、ビュー・ポートの幅がレイヤーの幅を決めないことを示します。

      このレイヤーのビュー・コンポーネントがScrollableを実装する場合、このメソッドは、その実装をビュー・コンポーネントに委譲します。

      定義:
      getScrollableTracksViewportWidth 、インタフェース: Scrollable
      戻り値:
      レイヤーがビュー・ポートの幅を追跡する必要があるかどうか
      関連項目:
    • getScrollableUnitIncrement

      public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction)
      スクロール増分値を返します。スクロール増分値は、orientationの値によって、新しい1行または1列を完全に表示するために、論理行または論理列を表示するコンポーネントに必要です。 理論的には、コンポーネントは項目を完全にエクスポーズするために必要な距離を返すことで、部分的にエクスポーズされている行または列を処理します。

      JScrollPaneなどのスクロール・コンテナは、ユーザーがユニット・スクロールを要求すると、このメソッドを使用します。

      このレイヤーのビュー・コンポーネントがScrollableを実装する場合、このメソッドは、その実装をビュー・コンポーネントに委譲します。

      定義:
      getScrollableUnitIncrement 、インタフェース: Scrollable
      パラメータ:
      visibleRect - ビュー・ポート内の可視のビュー領域
      orientation - SwingConstants.VERTICALまたはSwingConstants.HORIZONTAL。
      direction - 上または左にスクロールする場合は0より小さく、下または右にスクロールする場合は0より大きい。
      戻り値:
      指定された方向にスクロールするための「ユニット」増分値。 常に正の値。
      関連項目:
    • doLayout

      public void doLayout()
      LayerUIが設定されている場合、機能をLayerUI.doLayout(JLayer)メソッドに委譲します。
      オーバーライド:
      doLayout 、クラス:  Container
      関連項目:
    • getAccessibleContext

      public AccessibleContext getAccessibleContext()
      このJLayerに関連付けられたAccessibleContextを取得します。
      定義:
      getAccessibleContext、インタフェース: Accessible
      オーバーライド:
      getAccessibleContext、クラス: Component
      戻り値:
      このJLayerに関連付けられたAccessibleContext。