2011-05-14 88 views
7

Estoy tratando de hacer una pequeña aplicación no comercial y hacer que tenga una interfaz bien diseñada, con transiciones de pantalla y tal. Tengo cada "pantalla" en paneles separados en un JFrame y deseo poder deslizarlos suavemente al hacer la transición entre los paneles. ¿Hay alguna manera de lograr esto de una manera fácil?Java Swing elemento transiciones

+1

"¿Hay alguna manera de lograr esto de una manera fácil?" La respuesta a eso es casi siempre 'contratar a alguien que ya lo haya logrado'. –

+0

@AndrewThompson (si no te importa) por favor revisa mi implementación de esto (enlace dado en mi respuesta a continuación). – Ozzy

Respuesta

3

Este es un caso de uso de animación típico. La forma más fácil es utilizar el marco de animación. Sugeriría Trident

+0

Muchas gracias por ese enlace, pero el uso principal de los ejemplos de allí es el cambio de color. Según entiendo, cambia un cierto valor de un rango a otro. ¿Cómo podría aplicarse esto a la posición de un JPanel? – Dennis

+0

Hay varias maneras de lograr esto: 1. Los paneles pueden residir uno al lado del otro horizontalmente y su animación cambiaría sus coordenadas x 2. Los paneles se encuentran uno al lado del otro horizontalmente pero solo el panel visible se establece en ancho completo - ancho de otros se establece en 0. Su animación cambiaría el ancho de los paneles. IMO # 1 es preferible porque debería producir un verdadero efecto deslizante frente a aplastar uno en el número 2 –

+0

Se olvidó de mencionar. Trident se basa en la idea de cambiar las propiedades de los frijoles para animarlos. Así que cambiar las coordenadas o el ancho están bien. –

0

He escrito un programa simple en Java para hacer simples transiciones de diapositivas. Puedes adaptarlo para hacer otras cosas (que deslizar).

Aquí hay un enlace a mi aplicación: http://www.java-forums.org/entry.php?b=1141

Y aquí es un oyente que escribí para detectar un lastre para el dedo en la pantalla:

import java.awt.Point; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseListener; 
import java.awt.event.MouseMotionListener; 

/** 
* 
* @author Ozzy 
*/ 
public class GestureListener implements MouseListener, MouseMotionListener { 

     int dragStartX; 
     int dragStartY; 
     int dragEndX; 
     int dragEndY; 

     int currentX; 
     int currentY; 

     boolean dragged; 

     private void dragGesture() { 
      if (dragged) { 
       int distance = dragEndX - dragStartX; 
       System.out.println("Drag detected. Distance: " + distance); 
       if (distance > 144) /** 2 inches on 72dpi */ { 
        //finger going right 
        MyApp.scrollLeft(); 
       } else if (distance < -144) { 
        //finger going left 
        MyApp.scrollRight(); 
       } else { 
        //do nothing 
       } 
       dragged = false; 
      } 
     } 

     public void mouseDragged(MouseEvent e) { 
      dragged = true; 
      Point pos = e.getPoint(); 
      dragEndX = pos.x; 
      dragEndY = pos.y; 
     } 

     public void mouseMoved(MouseEvent e) { 
      Point pos = e.getPoint(); 
      currentX = pos.x; 
      currentY = pos.y; 
     } 

     public void mouseClicked(MouseEvent e) { 

     } 

     public void mousePressed(MouseEvent e) { 
      Point pos = e.getPoint(); 
      dragStartX = pos.x; 
      dragStartY = pos.y; 
     } 

     public void mouseReleased(MouseEvent e) { 
      dragGesture(); 
     } 

     public void mouseEntered(MouseEvent e) { 

     } 

     public void mouseExited(MouseEvent e) { 

     } 

    } 

Espero que esto ayude.

7

Dado que aún no ha aceptado una respuesta, ¿puedo sugerirle el SlidingLayout library? Es una biblioteca muy pequeña cuyo objetivo es crear transiciones suaves entre dos diseños de algunos componentes. Por lo tanto, hacer una transición entre dos pantallas es muy fácil de hacer. He aquí un ejemplo que acabo de hacer:

enter image description hereenter image description here

La diferencia entre las dos transiciones se basa en dos líneas de código. También puede crear transiciones más sofisticadas aplicando un retraso diferente en cada componente, para que no aparezcan todas a la vez, pero con algunas variaciones de tiempo entre ellas.

espero que puede ser útil para usted :)

0

Como alternativa, puede utilizar esta biblioteca animación simple, AnimaationClass, para moverse sobre su JComponents ejes X e Y a continuación, ocultar/disponer de ellos.

Esto ofrece una animación decente (básica y suave).

http://www.teknikindustries.com/downloads.html

Viene con un javadoc si de alguna manera que no entiende.