JLayeredPane z LayoutManager

Sytuacja: losowanie stosu kart do gry, jak w grze Solitaire. Ładnie ułożone.

Aby to osiągnąć, używamJLayeredPane w połączeniu z niestandardową implementacjąLayoutManager berło. Powodem używania niestandardowego LayoutManager jest to, że orientacja stosu jest różna, czasami karty do gry pokrywają się całkowicie, czasem częściowo, i ta logika wydaje się być dobrą robotą dla LayoutManagera, ponieważ zasadniczo sprowadza się to do ustawienia lokalizacji karty.

Tak więcLayoutManager jest odpowiedzialny za ustawienie współrzędnych X i Y wszystkich komponentów w moim stosie. TheJLayeredPane z drugiej strony jest odpowiedzialny za swoje współrzędne Z (poprzez swoje warstwy).

Dodawanie komponentu do aJLayeredPane w ten sposób:

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

gdzienew Integer(j) jest warstwą karty. To musi byćInteger ze względu na umowę zJLayeredPane.

Problem polega na tym, że mójStackLayout nie może mieć żadnego innego obiektu ograniczenia niżInteger, z powodu wskazanego powyżej. TheLayoutManager interfejs wymaga wdrożenia następującej metody:

addLayoutComponent(Component comp, Object constraints);

i minąłObject zawsze będzie tutajInteger.

W mojej szczególnej sytuacji mam szczęście, ponieważ moje współrzędne XY można obliczyć na podstawie współrzędnych Z. Na przykład karta w warstwiek musi być umieszczony w współrzędnej Y.k * offset. Tak więc w mojej sytuacji obiekt ograniczeń jestInteger to nie problem.

Zastanawiałem się, co powinieneś robić, gdy nie ma korelacji między współrzędnymi Z i współrzędnymi XY? Jak możesz to rozwiązać? Na przykład, jak bym użyłGridBagLayout w połączeniu z aJLayeredPane, gdzie pierwszy wymagaGridBagConstraints obiekt i drugi anInteger obiekt? Oczywiście GBL będzie układać się w taki sposób, że komponenty nie będą się nakładać, ale to tylko pomysł.

questionAnswers(2)

yourAnswerToTheQuestion