Могу ли я использовать BoxLayout в JLayeredPane для индивидуального размещения элементов на каждом слое?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Могу ли я использовать BoxLayout в JLayeredPane для индивидуального размещения элементов на каждом слое?

Сообщение Anonymous »

Я создаю Uno в качестве последнего проекта на уроке CompSci.

Карточки в 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»