2016-10-23 5 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

また、ペイントの前にショートディレイを追加するにはどうすればいいですか? – mtheorylord

答えて

2

repaint()への電話がありません。

Repaintは、何かが変更されたことを伝えるために描画コンポーネントに送信される信号で、paintメソッドを再度呼び出す必要があります。この場合、Flagsリストに追加することで描画方法が変わるため、フラグの追加が完了したらrepaint()に電話するだけです。

+0

ありがとうございます。どのようにあなたはそれの前に遅延を追加しますか? – mtheorylord

+0

@mtheorylord:Google [Java Swing delay](https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=java+swing+delay)最初の3回のヒットで[Swing Timers](https://docs.oracle.com/javase/tutorial/uiswing/misc/timer.html)について調べてください。 –

+0

ありがとうございました。皆さん。 – mtheorylord

関連する問題