Карточки в playerHandPanel состоят из JButtons. Кнопки должны отображаться последовательно в том порядке, в котором они были розданы, но также должны перекрываться, чтобы на панели помещалось больше начальных 7 карт.
Мой учитель предложил мне использовать JLayeredPane вместо JPanel в качестве контейнера, поскольку элементы можно размещать на разных слоях.
Это не сработало, потому что я использовал BoxLayout для автоматического размещения их с помощью LINE_AXIS, и этот макет полностью игнорирует слои и размещает их так, как если бы это был обычный JPanel.
< /p>
BoxLayout игнорирует слои:

Скорее, они должны перекрываться вот так:
[img]https:/ /i.sstatic.net/V0ncJ8gt.png[/img]
Вот как настраивается playerHandPanel:
Код: Выделить всё
public void setupImgs()
{
//gets the dealt hand and sets up the buttons/imgs
for (int i = 0; i < deck.getPlayerHand().size(); i++)
{
setupHand(new JButton(deck.getHandImgs().get(i)), i);
}
}
Код: Выделить всё
public void setupHand(JButton img, int index)
{
//TODO allow more than 7 cards in hand
//TODO jlayeredpane to allow overlap by using layers
//boxlayout puts them in sequential but ignores layers >:(
playerHandPanel = new JLayeredPane();
playerHandPanel.setBounds(250, 350, 1400, 300);
playerHandPanel.setBackground(Color.GRAY);
playerHandPanel.setLayout(new BoxLayout(playerHandPanel, BoxLayout.LINE_AXIS));
//using the
if (index == 0)
{
//playerHand1
ph1 = new JButton("", img.getIcon());
ph1.setSize(150, 240);
ph1.setLocation(0, 0);
ph1.setMargin(new Insets(1,1,1,1));
ph1.addActionListener(this);
ph1.addMouseListener(this);//moves up when card focused
playerHandPanel.add(ph1, JLayeredPane.DEFAULT_LAYER);
//placed on bottom-most layer
}
if (index == 1)
{
ph2 = new JButton("", img.getIcon());
ph2.setSize(150, 240);
ph2.setLocation(20, 0);
ph2.setMargin(new Insets(1,1,1,1));
ph2.addActionListener(this);
ph2.addMouseListener(this);
playerHandPanel.add(ph2, JLayeredPane.PALETTE_LAYER);
//placed on second lowest layer
}
if (index == 2)
{
ph3 = new JButton("", img.getIcon());
ph3.setSize(150, 240);
ph3.setLocation(50, 0);
ph3.setMargin(new Insets(1,1,1,1));
ph3.addActionListener(this);
ph3.addMouseListener(this);
playerHandPanel.add(ph3, JLayeredPane.MODAL_LAYER);
//placed on third lowest layer
}
//continued to 7...
window.add(playerHandPanel);
playerHandPanel.setVisible(true);
}
В конце концов я просто вернулся к BoxLayout. Я попробовал GroupLayout, потому что думал, что смогу группировать карточки по слоям определенным образом. Я не знаю, как это объяснить, но это не имеет большого значения, потому что это не сработало.
[img]https: //i.sstatic.net/V026DI6t.png[/img]
Подробнее здесь: https://stackoverflow.com/questions/784 ... dividually
Мобильная версия