2017-04-19 8 views
2

私は2つの.gifファイルを使用していて、フレームでそれらを切り替える。Java Swingの最初のフレームから.gifファイルを起動する方法は?

private Image currentGIF; 

if(x == 0) gif = "image1.gif" 
if(x == 1) gif = "image2.gif" 
ImageIcon reference = new ImageIcon(gif); 
currentGIF = reference.getImage(); 

-

public void paint(Graphics g) 
{ 
    Graphics2D graphic = (Graphics2D) g; 
    graphic.drawImage(gif, 0, 0, this); 
    g.dispose(); 
} 

-

@Override public void actionPerformed(ActionEvent arg0) 
{ 
    repaint(); 
} 

そしてこれは私の問題である:最初のフレームで

  1. image1.gif開始。
  2. image2.gifは、最初のフレームから開始します。
  3. image1.gifはランダムフレームから開始します。

.gifは動作し続けているようですが、image1を再度表示すると、最初のフレームでは表示されません。

+0

['Image#flush'](http://docs.oracle.com/javase/7/docs/api/java/awt/Image.html#flush(英語) )) – MadProgrammer

答えて

2

問題:

  1. のJFrameのpaintメソッドをオーバーライドしていないが、代わりにJPanelののpaintComponentメソッド内で自分の描画を行うください。
  2. あなたのペインティングメソッド(paintまたはpaintComponent)に与えられたGraphicsオブジェクトをJVMで廃棄しないでください。
  3. ペイント方法内のGUIの状態(スワップイメージなど)を変更しないでください。その代わりに、イメージを変更するために使用するイベントに反応するタイプのリスナー内で行います(ボタンを押すと変更する場合はボタンのActionListener、変更する場合はSwing TimerのActionListenerなど)。タイマーを変更します。
  4. これがアニメーションGIFでない場合は、画像をImageIconにして、使用するリスナーにもう一度setIcon(...)を使用してJLabelのアイコンをスワップすることを強く検討してください。
関連する問題