我正在尝试创建一个滑动菜单栏,其中菜单栏的初始宽度为60px,在菜单图标按钮的ActionPerformed事件(三条小水平线Menu Icon)上,宽度最初增加到260px以下代码:
private void menuLabelBtnActionPerformed(java.awt.event.ActionEvent evt) {
if(menuToggle.isSelected()){
menuToggle.setSelected(false);
Thread th = new Thread(){
public void run(){
try{
for(int i=259;i>=210;i=i-15){
Thread.sleep(1);
i--;
slideMenuPane.setBounds(slideMenuPane.getX(), slideMenuPane.getY(), i, slideMenuPane.getHeight());
}
for(int i=210;i>=110;i=i-35){
Thread.sleep(1);
i--;
slideMenuPane.setBounds(slideMenuPane.getX(), slideMenuPane.getY(), i, slideMenuPane.getHeight());
}
for(int i=110;i>=60;i=i-5){
Thread.sleep(1);
i--;
slideMenuPane.setBounds(slideMenuPane.getX(), slideMenuPane.getY(), i, slideMenuPane.getHeight());
}
}catch(Exception e){
System.out.println(e);
}
}
};
th.start();
}
else{
menuToggle.setSelected(true);
Thread th = new Thread(){
public void run(){
try{
for(int i=61;i<=110;i=i+15){
Thread.sleep(1);
i++;
slideMenuPane.setBounds(slideMenuPane.getX(), slideMenuPane.getY(), i, slideMenuPane.getHeight());
}
for(int i=110;i<=210;i=i+35){
Thread.sleep(1);
i++;
slideMenuPane.setBounds(slideMenuPane.getX(), slideMenuPane.getY(), i, slideMenuPane.getHeight());
}
for(int i=210;i<=260;i=i+5){
Thread.sleep(1);
i++;
slideMenuPane.setBounds(slideMenuPane.getX(), slideMenuPane.getY(), i, slideMenuPane.getHeight());
}
}catch(Exception e){
System.out.println(e);
}
}
};
th.start();
}
}
其中menuToggle(包含在Other Components
中)仅用于了解菜单栏是否已打开。
实际上,这是这样的:
但是,当我单击菜单图标按钮时,在动画开始前眨眼,它会显示宽度为60px的菜单栏,并且持续一毫秒。 无论如何,我可以删除眨眼吗?
答案 0 :(得分:1)
Thread.Sleep()可能是导致此问题的原因。使用Swing计时器检查自上一次运行以来已花费了多少时间,不应暂停线程或创建Thread.Sleep()这样的图形问题。