Как добавить изображения в массив изображений?

63
6

Я делаю апплет, который отображает случайную коллекцию из 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]);

Будет работать с изображениями.

Заранее спасибо и жаль, что это так сложно, я попытался максимально окунуть его!

спросил(а) 2021-01-28T01:43:35+03:00 4 месяца, 3 недели назад
1
Решение
63

Итак, здесь мои глупые берут на себя...

enter image description here

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, кроме того, что он гарантирует загрузку данных изображений ДО ПЕРЕДОМЫМИ методами, он также поддерживает большее количество форматов изображений и расширяется через плагины...

ответил(а) 2021-01-28T01:43:35+03:00 4 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема