我正在尝试在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的那条线,则标签会完全重新调整尺寸 这出了什么问题?
答案 0 :(得分:1)
问题是getScaledInstance()和资源加载都很慢。进行一次这些计算并缓存它们(以30个项目的数组)。不是每次都在for循环中。
另一件事:确保为动画使用Swingworker,这有助于计时并避免在事件调度线程(EDT)之外设置图标。