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
Respuesta
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
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
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 –
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. –
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.
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:
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 :)
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.
- 1. Agregar animaciones/transiciones a contenedores Swing de Java
- 2. Java Swing GridLayout "Cell span"?
- 3. Java Swing ventanas "niños"
- 4. Java Swing JMenu Mnemonic
- 5. Java swing Cargando Animación
- 6. Ventana corrediza Java Swing
- 7. Swing Threading de Java
- 8. Java Swing JFrame Layout
- 9. Java Swing: Jtable ArrayIndexOutOfBoundsException
- 10. Java Swing Program Structure
- 11. Java Swing ActionMap keys
- 12. Java Swing FlowLayout Alignments
- 13. menú desplegable Java swing y jlist
- 14. ¿Cómo tener múltiples transiciones de CSS en un elemento?
- 15. Juegos Java 2d con Java SWING
- 16. Colores del botón Java Swing
- 17. Java GUI Swing Model Explicación
- 18. Java Swing BoxDiseño ignorando AlignmentX
- 19. Cómo depurar Java Swing Layouts
- 20. Java Swing: Problema de enfoque
- 21. pregunta general sobre Java Swing
- 22. Java swing: repaint() vs invalida
- 23. Java Swing Dice Rolling Animation
- 24. Java Swing - alertas de usuario
- 25. Servidor Swing y Java EE
- 26. Java Swing de JTextField inserción
- 27. Un clásico StackOverflow: Java Swing
- 28. Apuesto Java Swing Look & Feel?
- 29. GoogleEarth dentro de Java Swing
- 30. Ventana emergente en Java Swing
"¿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'. –
@AndrewThompson (si no te importa) por favor revisa mi implementación de esto (enlace dado en mi respuesta a continuación). – Ozzy