JLayeredPane с LayoutManager

Ситуация: вытягивание стопки игральных карт, как в пасьянсе. Красиво сложены.

Чтобы достичь этого, ям, используяJLayeredPane в сочетании с пользовательской реализациейLayoutManager интерфейс. Причиной использования пользовательского LayoutManager является то, что ориентация стека меняется, иногда игральные карты закрывают друг друга полностью, иногда частично, и эта логика кажется хорошей работой для LayoutManager, потому что это в основном сводится к установке местоположения карты.

ИтакLayoutManager отвечает за установку X- и Y-координат всех компонентов в моем стеке.JLayeredPane с другой стороны, отвечает за их Z-координаты (через свои слои).

Добавление компонента вJLayeredPane выглядит так:

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

гдеnew Integer(j) это слой карты. Это должно бытьInteger из-за договора.JLayeredPane

Проблема здесь в том, что мойStackLayout не может иметь никакого другого объекта ограничения, кромеInteger, по причине, указанной выше.LayoutManager Интерфейс требует от вас реализации следующего метода:

addLayoutComponent(Component comp, Object constraints);

и прошлоObject здесь всегда будет.Integer

В моей конкретной ситуации мне повезло, так как мои XY-координаты могут быть рассчитаны на основе Z-координат. Например, карта в слоеk должен быть расположен в Y-координатеk * offset, Так что в моей ситуации объект ограничений являетсяInteger не проблема.

Мне было интересно, что вы должны делать, когда нет корреляции между координатами Z и XY? Как вы можете решить это тогда? Например, как бы я использовалGridBagLayout в сочетании сJLayeredPaneгде первый требуетсяGridBagConstraints объект и второй апInteger объект? Конечно, GBL будет размещаться таким образом, чтобы компоненты не перекрывались, но этоЭто просто идея.

Ответы на вопрос(2)

Ваш ответ на вопрос