2017-01-30 11 views
0

JLabel(アイコンとして画像を表示する)とJSlider(40画像間を切り替える)という単純なJFrameが必要です。JLabelアイコンとして使用する画像をプレロードする

スライダーのStateChangeイベントで新しい画像を読み込むと、プログラムが非常に遅くなります。特にスライドすると、プログラムが非常に遅くなります。

私は40枚の画像をプリロードしてスライダーで置き換えることを考えていました。これはスマートで可能ですか?

+2

をはい、それは可能です:あなたが必要なもの

public class MyClass { // other declarations private JLabel label; // other methods public void stateChange(ChangeEvent e) { label.setIcon(new ImageIcon(...)); // here is code to determine name of the icon to load. timer = null; } } 

は、次のようにコードを変更することです。あなたが何も指定していないので、この段階で具体的なことをお手伝いすることはできません。なぜ単にそれを試してみませんか?もしあなたがしなければ、どのような問題が起こっているのか、私たちはどのように知りますか? –

+0

は 'java.awt.MediaTracker'クラスを見て、' ImageIcon'でも私が間違っていないと 'MediaTracker'を使用しています - 画像をプリロードするのはかなりシンプルです –

+1

イベントリスナーにアイコンを直接ロードしないでください。代わりに 'javax.swing.Timer'を使用してください。したがって、不要な画像の読み込みを避けることができます。ユーザーがすばやくスライドすると(以前のタイマーをキャンセルして新しいタイマーを開始するだけです)。 –

答えて

2

私はあなたがこのような何か持っている、と仮定します。

public class MyClass { 
    // other declarations 
    private JLabel label; 
    private Timer timer; // javax.swing.Timer 
    // other methods 
    public void stateChange(ChangeEvent e) { 
     if (timer != null) { 
      timer.stop(); 
     } 
     timer = new Timer(250, new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       label.setIcon(new ImageIcon(...)); // here is code to determine name of the icon to load. 
       timer = null; 
      } 
     }); 
     timer.setRepeats(false); 
     timer.start(); 
    } 
} 
関連する問題