简体   繁体   中英

How do I add images to an image array?

I am making an applet that displays a random collection of 10 cards based upon 10 random integers.

My idea was to make an array of the 52 displayable cards (not including jokers) and display each cards from the array based upon the random integer like this (sorry i don't know how to use code blocks):

for (int i = 0; i<cards.length; i++) { //cards being my image array
     //code that displays each image
}

But I ran into trouble trying to add images into the array and I don't know how to display the images from the array either.

Should I be adding them like this:

Image[] cards = new Image[52];
cards[0] = c1;   //name of the Ace of Clubs, I had used getImage() to already get it

The preceding statements throw up errors saying it's an illegal start.

I also need help with displaying the images once I incorporate the images since I don't think:

System.out.println(cards[x]);

Will work with images.

Thanks in advance and sorry for seeming so complicated, I've tried to water it down as much as possible!

So, here's my silly take on it...

在此处输入图片说明

public class RandomCards {
    public static void main(String[] args) {
        new RandomCards();
    }

    public RandomCards() {

        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {

                try {
                    JFrame frame = new JFrame();
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    frame.setLayout(new BorderLayout());
                    frame.add(new RandomCardsPane());
                    frame.pack();
                    frame.setLocationRelativeTo(null);
                    frame.setVisible(true);
                } catch (Exception exp) {
                    exp.printStackTrace();
                }

            }

        });

    }

    public class RandomCardsPane extends JPanel {

        // A list is a collection of Image objects...
        private List<Image> cardList;
        private Image card = null;

        public RandomCardsPane() throws IOException {

            // My cards are stored in the default execution location of the program
            // and are named "Card_1.png" through "Card_51.png"...
            // You image loading process will be different, replace it here..

            // ArrayList is a dynamic list (meaning it can grow and shrink
            // over the life time of the list) and is backed by an array
            // which shouldn't concern you, the only thing you really need to
            // know is that it has excellent random access...
            cardList = new ArrayList<Image>(51);
            for (int index = 0; index < 51; index++) {
                cardList.add(ImageIO.read(new File("Card_" + index + ".png")));
            }

            addMouseListener(new MouseAdapter() {
                @Override
                public void mouseClicked(MouseEvent e) {
                    card = cardList.get(Math.min((int)Math.round(Math.random() * cardList.size()), 51));
                    repaint();
                }
            });
        }

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);

            if (card != null) {
                int x = (getWidth() - card.getWidth(this)) / 2;
                int y = (getHeight() - card.getHeight(this)) / 2;
                g.drawImage(card, x, y, this);
            }
        }

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(225, 315);
        }
    }
}

I would also prefer ImageIO over Toolkit.getImage or even ImageIcon , apart from the fact that it guarantees the image data is loaded BEFORE the method returns, it also supports a greater number of image formats and is extendable via plugins...

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM