提交 1d63e50b 编写于 作者: A alexp

6878792: Sample provided in javax.swing.JLayer class description is not usable

Reviewed-by: rupashka
上级 a3d57685
...@@ -56,28 +56,70 @@ import java.security.PrivilegedAction; ...@@ -56,28 +56,70 @@ import java.security.PrivilegedAction;
* {@code JLayer} is a good solution if you only need to do custom painting * {@code JLayer} is a good solution if you only need to do custom painting
* over compound component or catch input events from its subcomponents. * over compound component or catch input events from its subcomponents.
* <pre> * <pre>
* // create a component to be decorated with the layer * import javax.swing.*;
* JPanel panel = new JPanel(); * import javax.swing.plaf.LayerUI;
* panel.add(new JButton("JButton")); * import java.awt.*;
*
* public class JLayerSample {
*
* private static JLayer&lt;JComponent&gt; createLayer() {
* // This custom layerUI will fill the layer with translucent green * // This custom layerUI will fill the layer with translucent green
* // and print out all mouseMotion events generated within its borders * // and print out all mouseMotion events generated within its borders
* LayerUI&lt;JPanel&gt; layerUI = new LayerUI&lt;JPanel&gt;() { * LayerUI&lt;JComponent&gt; layerUI = new LayerUI&lt;JComponent&gt;() {
* public void paint(Graphics g, JCompo nent c) { *
* public void paint(Graphics g, JComponent c) {
* // paint the layer as is * // paint the layer as is
* super.paint(g, c); * super.paint(g, c);
* // fill it with the translucent green * // fill it with the translucent green
* g.setColor(new Color(0, 128, 0, 128)); * g.setColor(new Color(0, 128, 0, 128));
* g.fillRect(0, 0, c.getWidth(), c.getHeight()); * 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 * // overridden method which catches MouseMotion events
* public void eventDispatched(AWTEvent e, JLayer&lt;JPanel&gt; l) { * public void eventDispatched(AWTEvent e, JLayer&lt;? extends JComponent&gt; l) {
* System.out.println("AWTEvent detected: " + e); * 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 * // create the layer for the panel using our custom layerUI
* JLayer&lt;JPanel&gt; layer = new JLayer&lt;JPanel&gt;(panel, layerUI); * return new JLayer&lt;JComponent&gt;(panel, layerUI);
* }
*
* private static void createAndShowGUI() {
* final JFrame frame = new JFrame();
* frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
*
* // work with the layer as with any other Swing component * // work with the layer as with any other Swing component
* frame.add(layer); * 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();
* }
* });
* }
* }
* </pre> * </pre>
* *
* <b>Note:</b> {@code JLayer} doesn't support the following methods: * <b>Note:</b> {@code JLayer} doesn't support the following methods:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册