1

10 個のランダム整数に基づいて 10 枚のカードのランダム コレクションを表示するアプレットを作成しています。

私のアイデアは、52 枚の表示可能なカード (ジョーカーを除く) の配列を作成し、次のようなランダムな整数に基づいて配列から各カードを表示することでした (申し訳ありませんが、コード ブロックの使用方法がわかりません)。

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

しかし、配列に画像を追加しようとすると問題が発生し、配列から画像を表示する方法もわかりません。

次のように追加する必要がありますか?

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

前のステートメントは、不正な開始であるというエラーをスローします。

私は考えていないので、画像を組み込んだら画像を表示するのにも助けが必要です:

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

画像で動作します。

事前に感謝し、非常に複雑に見えて申し訳ありません。できるだけ簡単に説明しようとしました!

4

1 に答える 1

1

だから、これが私の愚かな見方です...

ここに画像の説明を入力してください

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);
        }
    }
}

また、メソッドが返される前に画像データが読み込まれることを保証するという事実は別として、より多くの画像形式をサポートし、プラグインを介して拡張可能であるという事実よりも、ImageIOさらにToolkit.getImageは好みます...ImageIcon

于 2012-10-07T23:44:10.963 に答える