gpt4 book ai didi

java - 在 Java 中使用 JComponent 绘制和定位多个 BufferedImage

转载 作者:行者123 更新时间:2023-12-02 06:31:35 25 4
gpt4 key购买 nike

我正在用 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 组件添加到面板中,创建卡片数组,并使用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 上绘制任何内容。有没有明显的事情表明我做错了,使这些 BufferedImage 不绘制(注意:我知道它们如果打印的话,它们都会彼此重叠。我编写代码作为测试,在处理之前绘制 BufferedImage带定位)。

提前致谢。

最佳答案

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

您正在使用 GridBagLayout 将 DisplayCard 添加到面板。问题是你的组件的大小是 (0, 0)。

您需要重写 DisplayCard 类的 getPreferredSize() 方法以返回一个合理的值,该值基本上就是您要绘制的图像的大小。

另一种选择是为所有卡片使用带有 IconImage 的 JLabel,而不是进行自定义绘制和管理组件的首选大小。然后,您可以使用适当的布局管理器将标签添加到面板。

如果您希望卡片彼此重叠,您可以使用 Overlap Layout .

关于java - 在 Java 中使用 JComponent 绘制和定位多个 BufferedImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20014647/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com