鱼眼对JLabel的影响

时间:2013-04-12 08:56:06

标签: java multithreading swing hover jlabel

我正在尝试在Fish Eye Image Menu中实施JavaBean。首先,我创建了一个JLabel并将此代码放在mouseEntered事件上。但是当我运行它时,输出是不稳定的,并且不会重新调整JLabel的大小。

这是我的代码。

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的那条线,则标签会完全重新调整尺寸 这出了什么问题?

1 个答案:

答案 0 :(得分:1)

问题是getScaledInstance()和资源加载都很慢。进行一次这些计算并缓存它们(以30个项目的数组)。不是每次都在for循环中。

另一件事:确保为动画使用Swingworker,这有助于计时并避免在事件调度线程(EDT)之外设置图标。