我有一个我正在做的卡片项目,它使用了GUI' s。我有一个JFrame
JFrame frame = new JFrame("Card Game");
//Splits the Jframe into two sections where the cards will be placed
//according to what user draws them
frame.setLayout(new GridLayout(1,2));
//The users, with different hands of cards
JPanel user1 = new JPanel();
JPanel user2 = new JPanel();
frame.add(user1);
frame.add(user2);
我希望能够为每个用户手有效地添加/删除卡片。用户可以绘制的最大卡数量为9.最初,用户将使用两张卡开始,我想制作它以便我可以整齐地添加另一张卡。如果面板中的空间用完,卡片应该开始在下方形成一排。
我如何实现这一目标?我在想某种方式使用JLabels,但不知道这是否是正确的方法。此外,我不知道应该使用哪种布局,所以任何帮助/提示都将不胜感激。谢谢。
修改
感谢您的帮助,但我仍有问题。我使用的是' Lourenco'张贴用作我添加卡片的面板。我没有改变它。 在我的GUI类中,我添加了
MyPanel myPanel = new MyPanel();
public void addPlayerCard(Card c){
myPanel.addCard(c.getImageIcon());//should draw the card into the panel
}
这就是我将我的imageicon添加到卡中的方式
java.net.URL imgURL = Card.class.getResource(imgFileName);
if (imgURL != null) {
image = new ImageIcon(imgFileName, "");
} else {
System.err.println("Couldn't find file: " + imgFileName);
image = new ImageIcon();
}
我做错了什么?
答案 0 :(得分:0)
尝试使用此课程。它是一个JPanel,因此您可以创建MyPanel的实例并添加到您的JFrame中。
要添加卡,您必须创建一个ImageIcon对象[例如:ImageIcon card = new ImageIcon(“c:\ users \ desktop \ aceOfSpades.png”)]。
创建ImageIcon对象后,必须调用addCard函数并将卡作为参数传递。该卡将被添加到卡的ArrayList中,并且将重新绘制painel。您可以在rapaintComponent方法中操纵2个常量CARD_WIDTH和CARD_HEIGHT以及变量x,y和widthToNextCard。
这种方式可以让您更自由地按照自己的方式绘制卡片,而不是使用具有不同JLabel的布局。
祝你好运;)import java.awt.Graphics;
import java.awt.Image;
import java.util.ArrayList;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
public class MyPanel extends JPanel {
private static final long serialVersionUID = 1L;
public final static int CARD_WIDTH = 50;
public final static int CARD_HEIGHT = 100;
private ArrayList<ImageIcon> cardsList;
public MyPanel() {
cardsList = new ArrayList<ImageIcon>();
}
public void addCard(ImageIcon newCard) {
cardsList.add(newCard);
repaint();
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
int widthToDrawNextCard = 75;
int x = 50;
int y = 100;
for (int i = 0; i < cardsList.size(); i++) {
ImageIcon card = cardsList.get(i);
Image image = card.getImage();
g.drawImage(image, x, y, CARD_WIDTH, CARD_HEIGHT, null);
x = x + widthToDrawNextCard;
}
}
}