JLayeredPane com um LayoutManager
A situação: desenhar uma pilha de cartas de baralho, como no jogo Solitaire. Bem empilhado.
Para conseguir isso, estou usando umJLayeredPane
em combinação com uma implementação personalizada doLayoutManager
interface. O motivo para usar um LayoutManager personalizado é que a orientação da pilha varia, algumas vezes as cartas de jogo se cobrem completamente, às vezes parcialmente, e essa lógica parece ser um bom trabalho para um LayoutManager, porque isso basicamente se resume a definir a localização do LayoutManager. cartões.
Então oLayoutManager
é responsável por definir as coordenadas X e Y de todos os componentes da minha pilha. oJLayeredPane
por outro lado é responsável por suas coordenadas Z (através de suas camadas).
Adicionando um componente a umJLayeredPane
vai assim:
JLayeredPane pane = new JLayeredPane();
pane.setLayout(new StackLayout(...));
pane.add(new CardView(...), new Integer(j));
Ondenew Integer(j)
é a camada do cartão. Este deve ser umInteger
devido ao contrato deJLayeredPane
.
O problema aqui é que meuStackLayout
não pode ter qualquer outro objeto de restrição do que umInteger
, devido à razão declarada acima. oLayoutManager
interface requer que você implemente o seguinte método:
addLayoutComponent(Component comp, Object constraints);
e o passadoObject
será sempre aqui umInteger
.
Na minha situação particular, tenho sorte, pois minhas coordenadas XY podem ser calculadas com base nas coordenadas Z. Por exemplo, o cartão na camadak
tem que estar localizado na coordenada Yk * offset
. Então, na minha situação, o objeto de restrições sendo umInteger
Não é um problema.
Eu queria saber o que você deveria fazer quando não há correlação entre as coordenadas Z e as coordenadas XY? Como você pode resolver isso então? Por exemplo, como eu usaria umaGridBagLayout
em combinação com umJLayeredPane
, onde o primeiro requer umGridBagConstraints
objeto e o segundo umInteger
objeto? É claro que um GBL será organizado de tal forma que os componentes não se sobreponham, mas é apenas a ideia.