2012-02-11 28 views
10

Estoy tratando de trazar una línea (línea roja en la imagen) sobre varios paneles, pero parece que no puedo hacer que funcione. ¿Cómo puedo hacer esto posible? ¿Alguna sugerencia?Dibujar líneas sobre varios paneles en Java

Drawing of required functionality

+0

BTW - buena imagen, pero por favor córtelos más pequeños en el futuro. Reemplacé el original con una versión recortada (430 × 375px). –

Respuesta

10

dibujar sobre la glass pane.

+0

o al JViewPort +1 – mKorbel

+0

@mKorbel ehh ... la ventana gráfica (si la hay) es _below_ el panel ... – kleopatra

+0

personalmente, no entiendo del todo las puntas del panel: es (por cierto, difícil de manejar)) propiedad de rootPane, que es el hijo directo de un contenedor de nivel superior. Entonces, ¿qué eres tú (y otros recientemente, eres el desafortunado hoy en día :-) realmente sugieres: administrar las pinturas superpuestas vidriadas en una base por cuadro? utilizar un rootPane en otro lugar? copiar la parte del código de rootPane que está gestionando glassPane en otro contenedor? Realmente curioso ... – kleopatra

5

JDK 7 agregó JLayer to support visual decorations en la parte superior de los componentes arbitrarios. Para versiones anteriores, está el proyecto JXLayer at java.net que en realidad es su predecesor, con una API muy similar

Aquí hay un ejemplo rudimentario, que usa una LayerUI personalizada que dibuja una línea recta desde un componente en un contenedor hasta otro componente en un contenedor diferente. El padre común de los dos contenedores está decorado con un JLayer usando ese ui:

JComponent comp = Box.createVerticalBox(); 
    final JComponent upper = new JPanel(); 
    final JButton upperChild = new JButton("happy in upper"); 
    upper.add(upperChild); 
    final JComponent lower = new JPanel(); 
    final JButton lowerChild = new JButton("unhappy in lower"); 
    lower.add(lowerChild); 
    comp.add(upper); 
    comp.add(lower); 
    LayerUI<JComponent> ui = new LayerUI<JComponent>() { 

     @Override 
     public void paint(Graphics g, JComponent c) { 
      super.paint(g, c); 
      Rectangle u = SwingUtilities.convertRectangle(upper, upperChild.getBounds(), c); 
      Rectangle l = SwingUtilities.convertRectangle(lower, lowerChild.getBounds(), c); 

      g.setColor(Color.RED); 
      g.drawLine(u.x, u.y + u.height, l.x, l.y); 
     } 

    }; 
    JLayer<JComponent> layer = new JLayer<JComponent>(comp, ui); 
+0

J (X) Capa es muy útil código +1 – mKorbel

Cuestiones relacionadas