JLayeredPane con un LayoutManager

La situación: dibujar una pila de cartas, como en el juego Solitario. Muy bien apilados.

Para lograr esto, estoy usando unJLayeredPane en combinación con una implementación personalizada de laLayoutManager interfaz. La razón para usar un LayoutManager personalizado es que la orientación de la pila varía, a veces las cartas se cubren entre sí completamente, a veces parcialmente, y esta lógica parece ser un buen trabajo para un LayoutManager, porque básicamente se reduce a configurar la ubicación de la tarjetas

Entonces elLayoutManager es responsable de configurar las coordenadas X e Y de todos los componentes en mi pila. losJLayeredPane por otro lado es responsable de sus coordenadas Z (a través de sus capas).

Añadiendo un componente a unJLayeredPane va así:

JLayeredPane pane = new JLayeredPane();
pane.setLayout(new StackLayout(...));
pane.add(new CardView(...), new Integer(j));

dóndenew Integer(j) Es la capa de la carta. Esto debe ser unInteger debido al contrato deJLayeredPane.

El problema aquí es que miStackLayout no puede tener ningún otro objeto de restricción que unInteger, por el motivo expuesto anteriormente. losLayoutManager La interfaz requiere que implementes el siguiente método:

addLayoutComponent(Component comp, Object constraints);

y el pasadoObject aquí siempre habrá unaInteger.

En mi situación particular, tengo suerte, ya que mis coordenadas XY se pueden calcular en base a las coordenadas Z. Por ejemplo, la tarjeta en capa.k tiene que estar ubicado en la coordenada Yk * offset. Así que en mi situación, el objeto de restricciones es unInteger no es un problema.

Me preguntaba qué debería hacer cuando no hay una correlación entre las coordenadas Z y las coordenadas XY. ¿Cómo puedes resolver esto entonces? Por ejemplo, ¿cómo usaría unGridBagLayout en combinación con unJLayeredPane, donde el primero requiere unGridBagConstraints objeto y el segundo unInteger ¿objeto? Por supuesto, un GBL diseñará de tal manera que los componentes no se superpongan, pero es solo la idea.

Respuestas a la pregunta(2)

Su respuesta a la pregunta