java - JLabel 上的鱼眼效果

标签 java multithreading swing hover jlabel

我正在尝试实现 Fish Eye Image MenuJavaBean 。首先,我创建了一个 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 的那一行,标签就会完美地重新调整大小。
这哪里出了问题?

最佳答案

问题在于 getScaledInstance() 和资源加载速度很慢。执行一次这些计算并将其缓存(在包含 30 项的数组中)。不是每次都在 for 循环中。

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

关于java - JLabel 上的鱼眼效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15967032/

相关文章:

java - 如何在两个平台上运行java程序?

java - 如何使用 swagger-jaxrs-doclet 的输出来生成 swagger 文档?

java - SDK 管理器未启动

java - 如何完成kafka消费者安全?(在shutdownHook里面调用thread#join有什么意思吗?)

java - 按顺序执行任务但从池中获取线程的 ExecutorService

c++ - 为什么我需要在多线程程序中使用 Pthread_sigmask 来确保设置处理程序正在处理信号?

java - 如何在 JFileChooser 中仅列出硬盘驱动器?

javascript - 如何将带有tinestamp等的CSV文件输入到mahout中实现相似度等功能?

java - 安卓封面

java - Jtable 不返回最后一个单元格值