2016-04-01 3 views
1

Я пытаюсь создать gui для руки, содержащей карты. Сами карты - это экземпляры класса, которые расширяют JPanel.Java, создающий графический интерфейс, который извлекает руку из карт

Мне нужно создать графический интерфейс, который содержит до 7 объектов карты, которые стека перекрывающихся поверх друг друга, так же, как вы бы

hold cards with hand

(игнорировать JFrames).

Можно ли достичь с помощью Swing, и если бы вы могли указать мне подходящего менеджера компоновки?

+0

Создайте карточки как [Изображение] (http://docs.oracle.com/javase/7/docs/api/java/awt/Image.html), сохраните карты в классе модели графического интерфейса пользователя и рисуйте карты на JPanel. –

+0

Мы рассматривали возможность создания карт в качестве изображений, но решили сделать их объектами по нескольким причинам (например, изменить различные значения элементов карты и иметь возможность инициировать карты разных типов, передавая аргументы конструктору, следовательно, быстрый способ создавать новые карты). – 13120dde

ответ

2

Я думаю, что в вашем случае вам нужно использовать JLayeredPane. не вы можете добавить любой Нет в JPanel, чтобы поместиться внутри JLayeredPane

layeredPane = new JLayeredPane(); 
layeredPane.setPreferredSize(new Dimension(300, 310)); 
layeredPane.setBorder(BorderFactory.createTitledBorder(
            "jlayered example")); 
layeredPane.addMouseMotionListener(new MouseMotionAdapter() { 
}); 

for (int i = 0; i < ...number of panels...; i++) { 
    JPanel panel = new Panel("panel"+i); 
    layeredPane.add(panel, new Integer(i)); 
} 

клик https://docs.oracle.com/javase/tutorial/uiswing/components/layeredpane.html, чтобы проверить, как использовать JLayeredPane

и если вы хотите jpanels перекрываться друг на друга просто установить макет в null layout и добавьте Jpanels внутри него.

+1

Пожалуйста, не рекомендуется использовать макет 'null', см. [Почему он недоволен использованием нулевого макета в swing] (http://stackoverflow.com/questions/6592468/why-is-it-frowned- по-использованию-a-null-layout-in-swing) и [Null Layout is Evil] (http://www.fredosaurus.com/notes-java/GUI/layouts/nulllayout.html) – Frakcool

+1

Thanx для tip, начал кодировать класс рук с layeredPane и, похоже, работает до сих пор. У меня есть некоторые функциональные возможности, такие как addCard() и playCard(), но у меня есть метод playCard(), когда я пытаюсь удалить слой ... однако нужно провести больше тестирования :) – 13120dde

1

Если бы вы могли указать мне подходящего макетщика?

У JDK нет менеджера компоновки для этого.

Отметьте Overlap Layout, который предназначен для этой цели.

Он работает, контролируя Z-порядок каждого компонента, добавленного к панели, чтобы обеспечить размещение в 3-м измерении.

+0

Это похоже на то, что нужно мы ищем, однако возможно ли сделать POP_UP показать карту в ее положении, но выше других карт, а не показывать ее в зарезервированном пространстве. Мы пытаемся реализовать такой метод с помощью метода mouseEntered() JLayeredPane и mouselistener (вот почему JLayeredPane представляется допустимым менеджером макетов). – 13120dde

+0

@ 13120dde, Как я упомянул о выполнении работ по слою, играя с Z-ордером каждой карты. Если вы хотите, чтобы щелкнутая карта была сверху, вы просто изменили свою позицию Z-Order на 0. Затем вам нужно будет revalidate() и перерисовать() родительскую панель, чтобы компонент был окрашен в новый Z-Order. – camickr

Смежные вопросы