Есть класс ImageImport, унаследованный от JPanel:
package engine;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JPanel;
public class ImageImport extends JPanel {
private static final long serialVersionUID = 1L;
private BufferedImage img;
public ImageImport(String imageName) {
try {
img = ImageIO.read(this.getClass().getResourceAsStream("/Cards/"+imageName+".png"));
} catch (IOException ex) {
System.out.println(ex.toString());
}
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(img, 0, 0, this);
}
}
Созданные на основе этого класса панели прекрасно отображают загруженные изображения. Панели хранятся в главном классе Table в:
public ArrayList<JPanel> cardsJPanels = new ArrayList<>();
и все принадлежат главной панели mainPanel.
В третьем классе Engine пытался через промежуточный массив сделать так:
private Table table;
public void newGame(){
ArrayList<JPanel> buffCardsJPanels = new ArrayList<>();
JPanel buffJP;
for (int i=0; i<=8; i++){
buffJP = new ImageImport(deck.get(i));
buffCardsJPanels.add(buffJP);
}
table.cardsJPanels.addAll(0, buffCardsJPanels);
table.mainPanel.repaint();
}
Ошибок никаких нет, программа загружается. По кнопке newGame() не делает ничего.
UPDATE: Сам понял, что обновлял только массив, не затрагивая mainPanel.
Решил проблему.
1. Очистил table.cardsJPanels от старых значений.
2. Передал в массив Component[] весь перечень элементов, которые лежат на mainPanel.
3. Пробежался по массиву, и если элемент = элементу типа ImageImport - удалить с панели по порядковому номеру i.
ВАЖНО: порядковый номер i при совпадении надо уменьшить на 1, так как при удалении элемента из панели все его элементы сдвигаются "вниз" по нумерации.
4. Пересоздал все элементы и заново их расположил в mainPanel.
public void newGame(){
JPanel buffJP;
int i=0;
table.cardsJPanels.clear();
Component[] с = table.mainPanel.getComponents();
for (Component j: с){
if (j instanceof ImageImport) {
table.mainPanel.remove(i);
i--;
}
i++;
}
for (i=1; i<=9; i++){
buffJP = new ImageImport(Integer.toString(deckNumbers_2.get(i-1)));
buffJP.setBounds(CARD_XY_LEFT.get(i*10+1).intValue(), CARD_XY_LEFT.get(i*10+2).intValue(),
CARD_WIDTH, CARD_HEIGHT);
buffJP.setOpaque(false);
table.cardsJPanels.add(buffJP);
table.mainPanel.add(table.cardsJPanels.get(i-1));
}
table.mainPanel.repaint();
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть веб-приложение на Spring MVC, клиентская сторона посылает Ajax запросы на сервер
ЗдравствуйтеМоя проблема в том, что я никак не соображу в чем именно может быть проблема