2013-11-16 2 views
0

Я работаю над игрой в блэкджек на Java. У меня есть несколько классов (Card, обувь, плеер и т.д.), а также JComponent определяется следующим образом:Покраска и позиционирование нескольких BufferedImages с использованием JComponent в Java

Public class DisplayCard extends JComponent { 

    private ArrayList<Card> mCards; 

    public DisplayCard(){ 
     mCards = new ArrayList<Card>(); 
    } 

    public void append(ArrayList<Card> newCards){ 
     mCards = newCards; 
     repaint(); 
    } 

    public void paintComponent(Graphics g){ 
     for (Card card : mCards) { 
      g.drawImage(card.getBuffImage(),10,10,null); 
     } 

    } 
} 

В моем классе водителя, у меня есть JPanel (mPlayerPanel). Я добавляю компонент DisplayCard к панели, создаю массив карт и использую append() для обновления списка. Частичная реализация:

DisplayCard playerDisp = new DisplayCard(); 

Shoe tableShoe = new Shoe(1); 

ArrayList<Card> cards = new ArrayList<Card>(); 
//Adds three cards to arraylist 
cards.add(tableShoe.getNextCard()); 
cards.add(tableShoe.getNextCard()); 
cards.add(tableShoe.getNextCard()); 

mPlayerPanel.add(playerDisp,new GridConstraints()); //need "GridConstraints" to appease Intellij 
playerDisp.append(cards); 

У меня нет ошибок при запуске этого кода. Однако он ничего не нарисовал на mPlayerPanel. Есть ли что-то очевидное, что я делаю неправильно, чтобы эти BufferedImages не рисовали (ПРИМЕЧАНИЕ: я знаю, что если они будут печатать, все они будут друг на друга. Я написал код как тест для рисования BufferedImage с позиционированием).

Заранее спасибо.

+1

Чтобы лучше помочь, опубликуйте [SSCCE] (http://sscce.org/). –

ответ

2
mPlayerPanel.add(playerDisp,new GridConstraints()); 

Вы добавляете свою DisplayCard на панель с помощью GridBagLayout. Проблема заключается в том, что размер вашего компонента равен (0, 0).

Вам необходимо переопределить метод класса DisplayCard getPreferredSize(), чтобы вернуть разумное значение, которое в основном было бы размером с изображениями, которые вы хотите нарисовать.

Вместо того, чтобы выполнять индивидуальную покраску и управлять предпочтительным размером вашего компонента, другим вариантом является использование JLabel с IconImage для всех ваших карт. Затем вы можете добавить ярлыки на панель с помощью соответствующего менеджера макетов.

Если вы хотите, чтобы ваши карты накладывались друг на друга, вы можете использовать Overlap Layout.

+0

Спасибо @camickr. Именно это и было проблемой. – user1825257