Timer 适用于 println,但不能使用 java 进行标签处理



我有一些标签,当按下字母a时变得可见。

private void formKeyPressed(java.awt.event.KeyEvent evt) {                                
    // TODO add your handling code here:
    if(evt.getKeyCode()==KeyEvent.VK_A){
        jLabel7.setVisible(true);            
        jLabel8.setVisible(true);
        jLabel9.setVisible(true);
        myBlink();
    }

我在计时器 myBlink() 上有标签

8
public void myBlink()
    {
    new Timer(1000, new ActionListener() {
        public void actionPerformed(ActionEvent e) {                    
            System.out.println("begin");
            jLabel8.setVisible(false);
            jLabel8.setVisible(true);
            System.out.println("Timer");
        }
    }).start();
    }

我已经放置了printlns以查看计时器是否开始和结束,当我按"a"键时,我的输出显示多次开始计时器,但我的标签没有出现和消失。 这段代码需要什么调整? 我错过了什么? 谢谢你多了一双眼睛。

这可能是因为您连续调用setVisible(false)并且setVisible(true)完成得太快而看不到,您应该使用变量并在调用Timer操作时随时修改其值,如下所示:

public void myBlink()
{
    new Timer(1000, new ActionListener() {
        boolean visible = true;
        public void actionPerformed(ActionEvent e) {
            jLabel8.setVisible(visible = !visible);
        }
    }).start();
}

最新更新