2016-10-23 1 views
-1

В моем приложении я создал массив для управления изображениями флагов в моем выводе. Это отлично работает, но когда я удаляю элемент из моего массива, изображение вообще не изменяется.Удаление элемента из массива не изменяется.

class Flag{ 

Image FlagImage; 
int FlagNum = 0; 

public Flag(int FlagNum) { 
    this.FlagNum = FlagNum; 
    try{ 
    FlagImage = ImageIO.read(new File("flag1.png")); 
    }catch(Exception e){ 
    } 
} 

public void Update() { 

} 

public void Draw(Graphics g) { 
    //Draw Flag 
    g.drawImage(FlagImage, ((FlagNum) % 3+1) * 100-100, (int)((FlagNum)/3) * 100+100, null); 
} 

} 
public class Flags extends JPanel { 

/** 
* Creates new form Flags 
*/ 
public Flags(){ 
    initComponents(); 
    FlagSet.add(new Flag(1)); 
    final Timer timer =new Timer(10, new ActionListener(){ 
     @Override 
     public void actionPerformed(final ActionEvent e){ 
      repaint(); 
      for (Flag f: FlagSet){ 
       f.Update(); 
      } 
     } 
    }); 

} 

public static ArrayList<Flag> FlagSet = new ArrayList(); 

@Override 
public void paintComponent(Graphics g){ 

    super.paintComponent(g); 

    for (Flag f: FlagSet){ 
     f.Draw(g); 

    } 
} 

затем я пытаюсь добавить флаги, как так:

flagCounter = 4; 
while(flagCounter > -1){ 
    Flags.FlagSet.add(new Flag(flagCounter)); 
    flagCounter--; 
} 

который работает нормально, но мой образ не изменится, если я ставлю в Flgas.FlageSet.remove(//Some flag) позже. Есть идеи? Заранее спасибо.

+0

Вы пробовали 'repaint()'? –

+0

Я новичок в java. Как использовать перерисовку? Думаю, ты ответил на мой вопрос. – mtheorylord

+0

Также как добавить shortdelay перед краской – mtheorylord

ответ

2

Похоже, что вам не нужен звонок repaint().

Repaint - это сигнал, отправленный компоненту чертежа, чтобы сообщить ему, что что-то изменилось, и что ему нужно снова вызвать методы paint. В этом случае, когда ваше дополнение к вашему списку Flags изменит способ его рисования, вы должны просто вызвать repaint() после того, как вы закончите добавлять свои флаги.

+0

Спасибо. Как бы вы добавили задержку перед этим? – mtheorylord

+0

@mtheorylord: Google [Задержка Java Swing] (https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=java+swing+delay), и вы будете узнайте о [Swing Timers] (https://docs.oracle.com/javase/tutorial/uiswing/misc/timer.html) в первых 3 хитах. –

+0

Большое спасибо. Вы оба. – mtheorylord

Смежные вопросы