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

クラスJLayer<V extends Component>

java.lang.Object
型パラメータ:
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
関連項目: