我正在尝试实现 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 的那一行,标签就会完美地重新调整大小。
这哪里出了问题?
最佳答案
问题在于 getScaledInstance() 和资源加载速度很慢。执行一次这些计算并将其缓存(在包含 30 项的数组中)。不是每次都在 for 循环中。
另一件事:确保为动画使用 Swingworker,这有助于计时并避免在事件调度线程 (EDT) 之外设置图标。
关于java - JLabel 上的鱼眼效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15967032/