在Java中将图像添加到GUI的最佳方法?

时间:2016-02-05 05:12:31

标签: java image user-interface layout

我有一个我正在做的卡片项目,它使用了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();
    }

我做错了什么?

1 个答案:

答案 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;
        }
    }
}