2017-08-23 2 views
0

Suivant cet exemple:zoom java Jlayeredpane, Loo childrens événements de souris

Zooming JLayeredPane via JLayer and the LayerUI

mais j'ai un problème. A l'intérieur du panneau j'ai plusieurs j panneaux, dragables et redimensionnables, et quand je ne suis pas en zoom 1 je perds la possibilité de les sélectionner avec la souris. Avez-vous une idée pourquoi? Je vous remercie!!!

+2

Vous pouvez inclure votre code afin que les gens puissent examiner et fournir une réponse – dat3450

Répondre

0

Le code est le même que l'exemple, mais ici, il va

TestJLayerZoom.java

import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 
import javax.swing.JComponent; 
import javax.swing.JFrame; 
import javax.swing.JLayer; 
import javax.swing.JPanel; 
import javax.swing.WindowConstants; 




public class TestJLayerZoom { 

    public static void main(String args[]) { 
     EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       JFrame frame = new JFrame(); 
       frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 

       JPanel panel = new JPanel(); 
       ZoomUI layerUI = new ZoomUI(); 
       JLayer<JComponent> jLayer = new JLayer<JComponent>(panel, layerUI); 

       JButton zoomIn = new JButton("Zoom In"); 
       zoomIn.addActionListener(new ActionListener() { 
        public void actionPerformed(ActionEvent e) { 
         layerUI.zoom += 0.1; 

         jLayer.revalidate(); 
         jLayer.repaint(); 
        } 
       }); 
       panel.add(zoomIn); 

       JButton zoomOut = new JButton("Zoom Out"); 
       zoomOut.addActionListener(new ActionListener() { 
        public void actionPerformed(ActionEvent e) { 
         layerUI.zoom -= 0.1; 
         jLayer.revalidate(); 
         jLayer.repaint(); 
        } 
       }); 
       panel.add(zoomOut); 

       frame.setPreferredSize(new Dimension(400, 200)); 
       frame.add(jLayer); 
       frame.pack(); 
       frame.setVisible(true); 
      } 
     }); 
    } 


} 

ZoomUI.java

import java.awt.AWTEvent; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import javax.swing.JComponent; 
import javax.swing.JLayer; 
import javax.swing.plaf.LayerUI; 


public class ZoomUI extends LayerUI<JComponent> { 

     public double zoom = 1; // Changing this value seems to have no effect 

     @Override 
     public void paint(Graphics g, JComponent c) { 
      Graphics2D g2 = (Graphics2D) g.create(); 
      g2.scale(zoom, zoom); 
      super.paint(g2, c); 
      g2.dispose(); 
     } 

     @Override 
     public void installUI(JComponent c) { 
      super.installUI(c); 
      JLayer jlayer = (JLayer) c; 
      jlayer.setLayerEventMask(
        AWTEvent.MOUSE_EVENT_MASK | AWTEvent.ACTION_EVENT_MASK 
        | AWTEvent.MOUSE_MOTION_EVENT_MASK 
      ); 
     } 

     @Override 
     public void uninstallUI(JComponent c) { 
      JLayer jlayer = (JLayer) c; 
      jlayer.setLayerEventMask(0); 
      super.uninstallUI(c); 
     } 
    } 

In the image I explain the problem