m.rice
m.rice

Reputation: 139

Timer works with println but not label using java

I have some labels that become visible when the letter a is pressed.

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();
    }

I have Label8 on a timer myBlink()

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();
    }

I have placed printlns to see if timer begins and ends and when I press key "a" my output shows begin Timer multiple times but my label does not appear and disappear. What tweak does this code need? What am I missing? Thanks for the extra set of eyes.

Upvotes: 1

Views: 28

Answers (1)

Nicolas Filotto
Nicolas Filotto

Reputation: 44965

This is probably because you call successively setVisible(false) and setVisible(true) which is done too fast to be seen, you should use a variable and modify its value any time the action of the Timer is called as next:

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

Upvotes: 3

Related Questions