0

JavaBeanFish Eye Image Menuを実装しようとしています。まず、 を作成し、このコードをイベントに配置しました。しかし、これを実行すると、出力が不安定になり、サイズが変更されません。JLabelmouseEnteredJLabel

これは私のコードです。

new Thread() {
  public void run() {
    for (int i = 0; i < 30; i++) {
      int x = imgLabel.getWidth()+1;
      int y = imgLabel.getHeight()+1;
      imgLabel.setSize(x , y );

      // sets the icon to the label
      imgLabel.setIcon(new ImageIcon(new ImageIcon(getClass().getResource("/pics/icon.png")).getImage().getScaledInstance(x , y, Image.SCALE_DEFAULT)));
      repaint();
      try {
        Thread.sleep(10);
      } catch (InterruptedException ex) {
        ex.printStackTrace();
      }
    }
  }
}.start();

イメージを JLabel に設定した行にコメントを付けると、ラベルのサイズが完全に変更されます。
これはどこが間違っていますか?

4

1 に答える 1

1

問題は、getScaledInstance() とリソースの読み込みが遅いことです。これらの計算を 1 回実行し、それらを (30 項目の配列で) キャッシュします。forループで毎回ではありません。

もう 1 つ: アニメーションには必ず Swingworker を使用してください。これにより、タイミングが改善され、イベント ディスパッチ スレッド (EDT) の外にアイコンが設定されるのを回避できます。

于 2013-04-12T22:33:36.170 に答える