簡體   English   中英

使用Java中的JComponent繪制和定位多個BufferedImages

[英]Painting and positioning multiple BufferedImages using JComponent in Java

我正在使用Java進行二十一點游戲。 我有幾個類(Card,Shoe,Player等)以及定義如下的JComponent:

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組件添加到Panel,創建一個卡陣列,並使用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有定位)。

提前致謝。

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

您正在使用GridBagLayout將DisplayCard添加到面板。 問題是你的組件大小是(0,0)。

您需要覆蓋DisplayCard類的getPreferredSize()方法以返回合理的值,該值基本上是您要繪制的圖像的大小。

除了自定義繪制和管理組件的首選大小之外,另一個選擇是為所有卡使用帶有IconImage的JLabel。 然后,您可以使用適當的布局管理器將標簽添加到面板。

如果您希望卡片相互重疊,可以使用重疊布局

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM