モジュール 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(Component), setView(Component), getView(), LayerUI, JLayer(Component, LayerUI), setUI(javax.swing.plaf.LayerUI), getUI(), 「直列化されたフォーム」
    • コンストラクタの詳細

      • JLayer

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

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

      • getView

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

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

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

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

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

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

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

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

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

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

        public boolean isOptimizedDrawingEnabled()
        JLayerは(JComponentで)このメソッドのデフォルト実装をオーバーライドし、falseを返します。 その結果、描画機構はJLayerの子に直接メッセージを送るのではなく、JLayerpaintの実装を呼び出します。
        オーバーライド:
        isOptimizedDrawingEnabled、クラスJComponent
        戻り値:
        false
      • 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(), LayerUI.eventDispatched(AWTEvent, JLayer), Component.isDisplayable()
      • getLayerEventMask

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

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

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

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

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

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

        定義:
        getPreferredScrollableViewportSize、インタフェースScrollable
        戻り値:
        ビュー・コンポーネントのビュー・ポートの適切なサイズ
        関連項目:
        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より大きい。
        戻り値:
        指定された方向にスクロールするための「ブロック」増分値
        関連項目:
        Scrollable
      • getScrollableTracksViewportHeight

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

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

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

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

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

        定義:
        getScrollableTracksViewportWidth、インタフェースScrollable
        戻り値:
        レイヤーがビュー・ポートの幅を追跡する必要があるかどうか
        関連項目:
        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より大きい。
        戻り値:
        指定された方向にスクロールするための「ユニット」増分値。 常に正の値。
        関連項目:
        Scrollable